Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2006-03-07 22:41:22

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

英語版 Nucleus 3.22 を SQLite で動くようにした物です。このフォーラムのどこかにアップしたかったのですが、どこがよいか分からなかったのでとりあえずここに挙げました。

まだまだ試作品の段階ですが、インストール / アイテム追加・削除 / コメント追加・削除がとりあえずできるようになったので、ここに公表します。試して頂ける方は、ご意見よろしくお願いします。

Nucleusコアが使えるだけで、まだプラグインには対応していません。ただ、MySQLに直接クエリーを投げるルーチンを含まないプラグインなら、使えるはずです。近い将来に、殆どのプラグインにも対応できるようにしようと思っています。(追記:現在のバージョンでは、殆ど(恐らく、90%以上)のプラグインに対応しています。)

改造のメインは、『nucleus/sqlite』フォルダにある『sqlite.php』です。ここに、SQLite関数をラップしてMySQL関数として供給するためのグローバル関数群があります。『nucleus_mysql_xxxx()』の形になっていて、NucleusコアのMySQL関数呼び出しはすべてこの『nucleus_mysql_xxxx()』に変更してあります。

これらを『mysql_xxxx()』にすればコアの改造もいらず、プラグインも殆どが使えるようになるはずですが、そうしなかったのは次の理由からです。(2006-03-23 追記:現在のバージョンでは、MySQL がインストールされていないサーバ環境では、コアの改造は必要有りません。)

1.MySQLとSQLiteの両方がインストールされているサーバでも試用できるようにするため。
2.SQLiteだけ供給していたプロバイダがある日突然MySQLも供給するようになった時の不都合を回避するため。

私自身、SQLのクエリーについての知識があまりある方ではないのですが、製作していて気が付いた MySQL-SQLite間でのクエリー構文の違いは、大まかに次のような感じです。

1.SQLiteでは、データに型の概念がない(型を宣言しても、無視されるようです)。
2.テーブル作成時・及び、データ挿入時の構文に若干の違いが見られる。
3.データ呼び出し時のクエリー構文は殆ど違わないようである。

1と3については、Nucleusコアを働かせている分には影響が無いように見えます。
2については現在、'CREATE TABLE' 'INSERT INTO' の二つのクエリーに関して変換を行っています。

(2006-03-11 追記)
データ呼び出しの際のクエリー構文についてもいくらか違いが認められており、翻訳ルーチンを追加しています。現在の所(ver 0.27a)、『match() against()』及び、『replace()』に付いてクエリーを変換しています。

(2006-03-22追記)
0.5.0 からベータバージョンです。殆ど問題なく動くようになりました。以前のバージョンを試用されていた場合は、Nucleus コアの部分も異なりますので、完全に入れ替えてください。データベースファイル(.DBSQLITE)はそのまま使えます。

最新版で対応が確認されているプラグイン
(mysql_query()を使用する物のみ、挙げてあります)
NP_LinkList 0.52, NP_MultipleCategories 0.401(要・微変更), NP_Book 0.1, NP_Calendar 0.84, NP_LatestWritebacks 0.6, NP_MediaFiles 1.01.6, NP_Trackback v2.03 jp4 他

(2007-02-09追記)
今後、Nucleus のコアは 3.3 を扱うこととします。

[size=150:ohsbo8p9]ここは、βバージョンだけです。正式の最新版は、こちらから


Attachments:
zip nucleus3.3_ja_utf8_b2_sqlite.zip, Size: 743.04 KiB, Downloads: 889
zip sqlite0903.zip, Size: 6.05 KiB, Downloads: 707

オフライン

#2 2006-03-07 22:41:50

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

ここに、Nucleus-SQLiteのコアファイルを置いておくことにします。使用の際は、ここのコアファイルに最新版のSQLite ラッパーを上書きして使って下さい。コアファイルについてオリジナル版との違いは、全ての『mysql_xxx()』が『nucleus_mysql_xxx()』に置き換わっていることだけです(他は、全くと言っていいほど同じです)。

(2006-03-22)
バージョン0.5からベータバージョンです。また、Nucleus コアの書き換えも自動でできるようになりました。

*************** 説明書 ***************

このツールは、Nucleus でデータベースとして、SQLite を用いるための物です。下に『使用方法』を長々と書いていますが、要するにzipファイルを展開して、『install.php』をブラウザで開くだけです。
nucleus/sqlite/フォルダのセキュリティーだけは注意してください。ここにデータベースファイル(.DBSQLITE)が入っています。読み取られないようにする .htaccess ファイルを入れてありますが、環境によってはこの.htaccess による防御が効かないこともありますので、念のために確認を怠らないようにしてください。

*************** 使用方法 ***************

Nucleus のインストールの際は、データベースのアクセスIDやパスワードなどは指定する必要はありません。SQLite はデータベースとして通常ファイルを用います。これは、『nucleus/sqlite/.dbsqlite』固定です。インストール前に『nucleus/sqlite/』フォルダのパーミッションを、読み書き可能な形(777とか)にしてください。別のファイル名を使用したい場合は、『nucleus/sqlite/sqlite.php』を書き換えてください。

あとは、『install.php』を実行するだけです。オリジナル版のNucleusと同じようなインストール完了画面が出れば、おそらくインストールが成功しています。このとき、NP_SkinFiles に加えて、NP_SQLite もプラグインとしてデフォルトでインストールされるはずです。もしインストールされていない場合は、手動でインストールしてください。

あとの使い方は普通の Nucleus と 99% 同じです。プラグインをインストールする際は、PHPファイルのパーミッションを読み書き可能な設定にしておけば、NP_SQLite が自動的にSQLite用にプラグインのPHPファイルを書き換えてくれるはずです。

Nucleus のバージョンアップがあった際の対応ツールなどは、extra/sqlite/ フォルダに有ります。


Attachments:
zip nucleus3.22_sqlite_060b.zip, Size: 558.3 KiB, Downloads: 867
zip nucleus3.22_ja_utf8_sqlite_060b.zip, Size: 713.66 KiB, Downloads: 798
zip nucleus3.22_ja_euc_sqlite_060b.zip, Size: 711.78 KiB, Downloads: 903

オフライン

#3 2006-03-07 23:11:46

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

素晴らしいではないですか!!

本家フォーラムの方には投稿されないのですか?
あちらの方にはSQLiteサポートを待っている人たちがかなりいると思います。

Katsumi さんの発言:

Nucleusコアが使えるだけで、まだプラグインには対応していません。ただ、MySQLに直接クエリーを投げるルーチンを含まないプラグインなら、使えるはずです。近い将来に、殆どのプラグインにも対応できるようにしようと思っています。

せっかくだから、プラグインに対応してから本家に投稿した方がいいかな。

うーーん。こんなの日本にあるけど、って言ってきても良いですか?
というか、Andyさんに宣伝してきて、って言っても良いですか?
というか、それよりも前に日本フォーラムをチェックしている英語圏の人が先に報告しちゃうかも、ですけど。
(機械翻訳頼りに日本フォーラム巡回している人って結構いるみたいですし)


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#4 2006-03-07 23:18:59

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

nakahara21 さんの発言:

素晴らしいではないですか!!

本家フォーラムの方には投稿されないのですか?
あちらの方にはSQLiteサポートを待っている人たちがかなりいると思います。

どうも有り難うございます 。:D

nakahara21 さんの発言:

うーーん。こんなの日本にあるけど、って言ってきても良いですか?
というか、Andyさんに宣伝してきて、って言っても良いですか?

いいですよ、っていうかよろしくお願いします :!: 。私は自己紹介が得意な方ではないので、nakahara21さん、もといまみおさんか、Andyさんにトピックを立ち上げて貰えれば、その続きに記事を書くことができるかと思います。英語も少しはできますから。

オフライン

#5 2006-03-08 01:14:47

kitsune.info
メンバー
From: 河内國
登録日: 2004-07-29
投稿: 261
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

これは興味深いハックですね。独自フォークにするのはもったいないかも。
だいぶ前に本家の開発者 ML でも要望があったような記憶があります。

最近はレンタルサーバの PHP で PEAR がインストール済みという例が増えていますから、DB 系の PEAR ライブラリを利用することにすれば DB エンジンの差異はほとんど吸収されます。
SQLite だけじゃなく PostgreSQL、はては Oracle とか MS SQL Server でも動くようになったら、ちょっとすごいかも。
# ま、パフォーマンスが落ちるかも知れませんし plugin のコードに mysql_*() な関数が含まれてたら併用できなくなりそうですが。

いや、別に作ってくれとかやってみろとか言ってるわけじゃないですよ?
<ぼそ>思ってるけど 8)</ぼそ>


kitsune.info -- from The United Native Comedians of Osaka

オフライン

#6 2006-03-08 02:02:48

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

本家のフォーラムにも投稿してきました。 smile

あちらにも書きましたが、現在の問題点はNucleusの検索機能を使った時に起きます。SQL の Query の記述が得意な人の意見が欲しいところです。

kitsune.info さんの発言:

PostgreSQL、はては Oracle とか MS SQL Server でも動くようになったら、ちょっとすごいかも。
# ま、パフォーマンスが落ちるかも知れませんし plugin のコードに mysql_*() な関数が含まれてたら併用できなくなりそうですが。

現在使用中のサーバでは、PostgreSQLが使えないので、使える人に是非コードを書いて欲しいです。 yikes

プラグインの対応については、プラグインのインストール時にphpファイル中の『mysql_xxxx()』を『sqlite_mysql_xxxx()』に、正規表現か何かで書き換えることを考えています。なので、併用やその他諸々の問題は起きないのではないかと。また、install.php 実行時にコアのphpをすべて調査して同じように書き換える事を考えているので、コアのアップグレードも簡単にできるようになると思っています。

オフライン

#7 2006-03-08 18:59:52

mekyo
メンバー
登録日: 2005-11-22
投稿: 80

Re: SQLite版Nucleus3.3 βバージョン

すごいですね
SQLite版 おめでとうございます

まだ 詳しくながめていませんが (^_^;)

たまにsqlite使うので 気を付けていることは
CREATE TABLE IF NOT EXISTS
が使えないことですね。

2.テーブル作成時・及び、データ挿入時の構文に若干の違いが見られる。

は それのことでしょうか?

Nucleusのデータのコア部分をのぞいたことがないので
使っているかはわかりませんが
TABLE IF NOT EXISTS で フォルダを検索すると
プラグインで 何件かヒットするので
ちょっと気になりました

なにかテーブルのありなしが簡単に帰ってくる判定関数があると
プラグインの移植がしやすくなると思います。

まだよくみていないので 作っていたらごめんさない(^_^;)


あと
SQLのコードの書き方に問題があったのかもしれませんが
昔 nullデータがあると検索で 期待したものがかえってこないというようなこと
があったっようなきがします。
書いたコードに問題があったのかもしれないですけど(^_^;)
そのときは 全部 空文字代入して逃げました  (^_^;

オフライン

#8 2006-03-08 19:16:43

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

mekyo さんの発言:

たまにsqlite使うので 気を付けていることは
CREATE TABLE IF NOT EXISTS
が使えないことですね。

独自テーブル使うプラグインではこれは,ほとんど使ってますね。プラグインのアンインストール時にテーブルを削除しない設定が可能なプラグインはすべて使っていると思います。
ここが最難問かもしれないですね。

オフライン

#9 2006-03-08 19:59:20

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

今日見たら、ダウンロード数が2になってる。ちょっと嬉しい(1回目は、自分だけれど)。 tongue

mekyo さんの発言:

たまにsqlite使うので 気を付けていることは
CREATE TABLE IF NOT EXISTS
が使えないことですね。

Andy さんの発言:

独自テーブル使うプラグインではこれは,ほとんど使ってますね。

なるほど、参考になります。コマンドが『CREATE TABLE IF NOT EXISTS』で固定ならば、それほど難しくないかもしれません。テーブルの有無を調べるクエリーを作ることができれば、それを投げて、有ると判断されれば単純な『CREATE TABLE』クエリーを投げるようにすればよいかも。

mekyo さんの発言:

2.テーブル作成時・及び、データ挿入時の構文に若干の違いが見られる。

は それのことでしょうか?

今のところ、『TYPE=MyISAM』の削除と、『auto_increment』『UNIQUE KEY』あたりの変換です。

mekyo さんの発言:

SQLのコードの書き方に問題があったのかもしれませんが
昔 nullデータがあると検索で 期待したものがかえってこないというようなこと
があったっようなきがします。

nullデータの調査を含めて、クエリーを検査してから投げるようなことを考えています。特に、MySQLとSQLiteで文字列のエスケープ方法が異なるので、このあたりでクエリ・インジェクションが起こらないようにすることが優先課題です。

今、次の事で困っているのでどなたか教えてくださいませんか。Nucleusで『query string』という内容で検索すると、次のようなクエリーが投げられます。

SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author, m.mrealname as authorname, i.itime, i.imore as more, m.mnumber as authorid, m.memail as authormail, m.murl as authorurl, c.cname as category, i.icat as catid, i.iclosed as closed, match (ititle,ibody,imore) against (' query string ') as score FROM nucleus_item as i, nucleus_member as m, nucleus_category as c WHERE i.iauthor=m.mnumber and i.icat=c.catid and i.idraft=0 and i.iblog in (1) and i.itime<="2006-03-08 19:49:33" and match (ititle,ibody,imore) against ('query') > 0 AND match (ititle,ibody,imore) against ('string') > 0 ORDER BY score DESC LIMIT 0,50

ここで、『match ( ) against ( )』相当の処理は、SQLiteではどのようにしたらよいでしょうか。簡単には、『WHERE (ititle,ibody,imore) like '%query%' and (ititle,ibody,imore) like '%string%' 』で良さそうなのだけれど、『ORDER BY score DESC LIMIT 0,50』の部分をどうすれば…。

オフライン

#10 2006-03-08 20:25:20

mekyo
メンバー
登録日: 2005-11-22
投稿: 80

Re: SQLite版Nucleus3.3 βバージョン

とりあえずテーブルの存在は こんなので
返ってくるので
プラグインで急いで対応させるときとかは

IF NOT EXISTS
を消してifでくくればいいのかなぁ?


// http://www.sqlite.org/faq.html#q9

  function ExistTable($db,$tablename) {
     $result = sqlite_query($db,'SELECT tbl_name FROM sqlite_master WHERE type=\'table\''
     .sprintf(' and tbl_name="%s" limit 1' ,sqlite_escape_string($tablename)) );
     return (sqlite_num_rows($result) > 0);
  }

if (!ExistTable($db,'foo')) {
         sqlite_query($db,'CREATE TABLE foo (bar varchar(10))');
}

オフライン

#11 2006-03-08 21:04:13

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: SQLite版Nucleus3.3 βバージョン

yikes とにかくすごい改造ですね。

楽しそうです。そしてすごいバイタリティー!

Katsumi さんの発言:

今日見たら、ダウンロード数が2になってる。ちょっと嬉しい(1回目は、自分だけれど)。 tongue

3回目は私。
SQLiteの実装経験はないのですが、ちょっと試したくなりました。

今のコードをみるとMySQL関数をオーバーライドしてSQLite化っていう感じでしょうか。
今後は分岐点がいろいろありそうですね。

・PEAR DBみたいに抽象化してnucleusコア内からSQLを排除するラッパーの開発
・SQL部分を残して、それぞれのDB毎にカスタマイズ
・SQLをANSI標準に書き換えて各DBへの対応モジュールを付加
・あえてSQLiteに特化

オフライン

#12 2006-03-08 22:39:42

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

mekyo さんの発言:

とりあえずテーブルの存在は こんなので
返ってくるので

早速の情報、どうも有り難うございます。試してみます。

mekyo さんの発言:

プラグインで急いで対応させるときとかは

プラグインの対応、もう少し待ってください。基本的には、MySQL用のクエリーを書くことで、すべて対応できるようにする予定ですので…。プラグイン作者の方は、従来通りMySQL用にコードを書いて頂けたらと思っています。

kosugiatkips さんの発言:

・SQL部分を残して、それぞれのDB毎にカスタマイズ

こんなのを考えています。SQLを排除する一般的なラッパーに付いては、消極的ですね。SQL-Queryエラーが出た時に、PHPのどの行でのエラーかが分かりにくいかと。つまり、スクリプトの開発はあくまでMySQLで行うのが良いと思っています。

Katsumi さんの発言:

今、次の事で困っているのでどなたか教えてくださいませんか。Nucleusで『query string』という内容で検索すると、次のようなクエリーが投げられます。

解決しました(お騒がせしました)。SQLiteでは、クエリー内のユーザー関数が定義できるんですね(ちょっと、すごいのかも)。それで、match_against()というユーザー関数を定義して、それを使うようにクエリーを書き換えるようにすればうまく行きました。『ORDER BY score DESC LIMIT 0,50』の部分は、SQLiteでもそのまま通りました。

(追記)
おかげさまで、『CREATE TABLE IF NOT EXISTS 』に対応しました。NP_MultipleCategoriesのテーブル作成ルーチンで、動作確認しました。

オフライン

#13 2006-03-09 00:58:45

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

バージョン 0.1.1をアップしました。検索機能が使えるようになり、『CREATE TABLE IF NOT EXISTS』に対応しました。ダウンロードファイルは、バージョン 0.1 との差分だけです。『nucleus/sqlite/sqlite.php』に上書きして使ってください。

オフライン

#14 2006-03-12 08:14:14

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

フォーラム復活して、ヨカッタです。復旧作業お疲れさまでした。復旧したらこのトピック、Stickyにしてもらってました :shock: 。嬉しいのと、非常に光栄なのと、期待に答えられるかどうか不安なのと、複雑です smile

バージョン 0.27aをアップしました。このバージョンでようやく、日本語にも対応させました。日本語版についても、インストールと記事・コメントの書き込みができることを確認しています。それから、SQLデータベースの取り込みができるようになりました。

現時点でのロードマップは、次の通りです。

1.自分自身のブログのミラーを、SQLiteを使って構築する。
2.プラグインに完全対応できるようにする。
3.ベータ版の配布。

このロードマップにしたがって進めていくと同時に、SQLインジェクションによるセキュリティーホールが入らないようにソースコードを見直す作業が入ります。現時点ではこの見直し作業は殆ど終わっていて、あと一息と言うところです。

P.S.
コアファイルをSQL用に自動的に書き換えてしまうスクリプトを制作しているのですが、現在の物は英語版とEUC-JP版では上手くいきますがUTF8版ではダメです。こちらの方はNucleus 3.3 がでるまでに仕上げたいと思っています。Nucleus 3.22 に付いては英語版・日本語版の両方で改造コアをすでに用意してあります(2番目の記事を参照)。

オフライン

#15 2006-03-12 17:26:33

mekyo
メンバー
登録日: 2005-11-22
投稿: 80

Re: SQLite版Nucleus3.3 βバージョン

バージョン 0.27a
euc版
の /install.sql

ですが、

害はないのですが
できたブログのindex.php?itemid=1

改行が
rn
rn
として表示されます。


新しく書いた記事には影響ないようです。

オフライン

#16 2006-03-12 20:18:30

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

mekyo さんの発言:

改行が
rn
rn
として表示されます。

そうなんですよ :? 。これは、英語版を含む全てのバージョンで起こっていて、まだ改善されていません。SQLiteとMySQL間で文字列のエスケープの仕方が違っていて、それが原因だと考えています。新しく書く記事ではそういうことは起こらないので、mekyoさんおっしゃるように実害はないかと思います。

これが直る頃にはベータ版配布かな。 wink

オフライン

#17 2006-03-12 21:45:52

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: SQLite版Nucleus3.3 βバージョン

Katsumi さんの発言:

SQLiteとMySQL間で文字列のエスケープの仕方が違っていて、それが原因だと考えています。新しく書く記事ではそういうことは起こらないので、mekyoさんおっしゃるように実害はないかと思います。

エスケープの仕方が違うということは、バックスラッシュではエスケープされないということでしょうか。
だとすると、addslashesを使っている場所でエスケープが実質的に無効になっているということのようにも思え、
コードを眺めているだけで、インストールしていないのでテストしないでこんなことを書くのもなんなんですが、
シングルクォートなどを検索文字列に使用した場合にSQLインジェクションが可能になったりしませんか?

オフライン

#18 2006-03-12 23:13:42

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

kosugiatkips さんの発言:

エスケープの仕方が違うということは、バックスラッシュではエスケープされないということでしょうか。

その通りです。SQLiteでは、文字列はシングルクオート『'』で囲み、『'』を文字列に含めたいときは『''』のように二つつなげるというやり方です。

kosugiatkips さんの発言:

だとすると、addslashesを使っている場所でエスケープが実質的に無効になっているということのようにも思え、
コードを眺めているだけで、インストールしていないのでテストしないでこんなことを書くのもなんなんですが、
シングルクォートなどを検索文字列に使用した場合にSQLインジェクションが可能になったりしませんか?

最終目標は、MySQL用にコードを書いている限り、SQLインジェクションが不可能であるといったものです。sqlite.phpの現在のバージョン(0.27a)ではクエリー中に『"』『'』『`』が在るかどうかをまず確かめ、もしあればMySQLのルールに従った形で文字列の認識を行って、全ての文字列を『'』ではさみ、かつSQLite用にエスケープした状態にします。その後sqlite_query()関数にクエリーを引き継いでいるので、もしこの作業がパーフェクトに行われればaddslashes等を用いてエスケープすることで、SQLite版Nucleusでも大丈夫だということになります。
先の記事においてロードマップについて書いた部分で『SQLインジェクションによるセキュリティーホールが入らないようにソースコードを見直す作業』と述べたのは、このあたりを意識しています。

オフライン

#19 2006-03-13 00:04:44

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: SQLite版Nucleus3.3 βバージョン

Katsumi さんの発言:

その通りです。SQLiteでは、文字列はシングルクオート『'』で囲み、『'』を文字列に含めたいときは『''』のように二つつなげるというやり方です。

なるほど。。どこかで見たようなエスケープですね。Shift_JIS向きのような。

Katsumi さんの発言:

最終目標は、MySQL用にコードを書いている限り、SQLインジェクションが不可能であるといったものです。

SQLite版へのプラグインを書くときにsqlite_escape_stringを使うのかとおもっていましたが、マップしているので
普通にMySQL用に作ればいいわけですね。

sqlite_escape_stringならNullはセーフだと思うのですが、sqlite_changeQuoteでNull文字を突っ込まれた場合とか、どうなるんだろうと思ったりもしますが、後は自分で調べてみますね。(調べてから書けって=>俺)
ありがとうございました。

オフライン

#20 2006-03-13 00:37:29

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

kosugiatkips さんの発言:

SQLite版へのプラグインを書くときにsqlite_escape_stringを使うのかとおもっていましたが、マップしているので
普通にMySQL用に作ればいいわけですね。

その通りです。むしろ、sqlite_escape_stringを使ってはいけないということになります。『mysql_escape_string』『mysql_real_escape_string』はNucleusコアでは使われていないのでsqlite.phpでは未実装ですが、プラグイン中で使っている人もいると思うので、『sqlite_mysql_escape_string()』は『addslashes()』で返そうかと思っています。

kosugiatkips さんの発言:

sqlite_escape_stringならNullはセーフだと思うのですが、sqlite_changeQuoteでNull文字を突っ込まれた場合とか、どうなるんだろうと思ったりもしますが、後は自分で調べてみますね。

お知恵拝借したいので、よろしくお願いします。

P.S.
現在、自分のブログのデータをSQLite版に入力するために、悪戦苦闘中です。 sad
それ用(データ取り込み用)のプラグインを一つ書かなければならない気配です。

オフライン

#21 2006-03-13 08:44:50

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

一難去って、また一難。 sad

今使っているMySQLを使ったブログのデータベースの全てのデータを、『DBの保存/復元』プラス自作のPHPでSQLiteに取り込む事に成功。ここまでは良かったんですが、いざブログを表示させてみると、『Warning: sqlite_query(): no such function: 』のオンパレード。Nucleus コアだけの時は良かったんですが、プラグインを使うとそれぞれのプラグインで種々雑多なqueryが投げられるもんで、エラー続出です。

つまり、プラグインではMySQLの『SELECT 節と WHERE 節で使用する関数』が随分使われているんですね~。『match() against()』だけではなかった…。

乗りかかった船なので、クエリー中で使われる関数は全てサポートする予定です。ただ、よく使われている関数から順に記述していきたいので、もしよろしければ、どんな関数が使われているか知らせていただけませんでしょうか。現在のところこちらで把握している関数は、次の通りです。

UNIX_TIMESTAMP(i.itime)
REGEXP "(^|,)(,|$)"
DAYOFMONTH(itime)

よろしくお願いします。

オフライン

#22 2006-03-13 08:51:32

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

NP_ShowBlogsでは

concat(c.cname, " on ", ifnull(b.bname,"")) as category

を使っています。

NP_ItemNaviEXとNP_MultipleCategoriesで『SUBSTRING』使用しています。

NP_UpdateTimeには、

$query = 'SELECT r.up_id as up_id, IF(INTERVAL(r.updatetime, i.itime), UNIX_TIMESTAMP(r.updatetime), UNIX_TIMESTAMP(i.itime) ) as utime FROM '.sql_table('plugin_rectime') . ' as r, '.sql_table('item') .' as i WHERE  r.up_id=i.inumber';

という構文があります。

NP_MultipleCategoriesには『REPLACE INTO ~』が登場します。

あと、普通にいろんな所で『SELECT count(*)』が使われています。

『SELECT ~ WHERE ~ BETWEEN x AND y』も見かけましたが、関係ありますか?

NP_MultipleCategoriesとNP_TrackBackで『SHOW FIELDS from ~』使っています。

NP_CommentTreeで

SELECT citem, MAX(UNIX_TIMESTAMP(ctime)) as ctimest FROM ~ WHERE ~ GROUP BY citem  ORDER BY ctimest DESC LIMIT ~

という構文があります。

MONTH(i.itime)』と『YEAR(i.itime)』もありました。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#23 2006-03-14 00:12:03

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

有り難うございます。早速、検討します。

(追記)

次の関数は、最優先で実装する事にします。

concat,ifnull,IF,UNIX_TIMESTAMP,INTERVAL,SUBSTRING,MONTH,YEAR

『SHOW FIELDS from ~』に加えて、『SHOW KEYS FROM 』がコアで使われている(データベース保存時)ので最優先で実装予定です。

『REPLACE INTO ~』『SELECT count(*)』『SELECT ~ WHERE ~ BETWEEN x AND y』『MAX()』は、標準のSQLiteで大丈夫のようです。

『GROUP BY』『ORDER BY』は、現在調べています。

オフライン

#24 2006-03-14 09:07:31

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: SQLite版Nucleus3.3 βバージョン

あと、現在の最新版で使われているかどうかは未調査ですが、『DISTINCT』を使っているプラグインがあるかもしれません。
(このフォーラムでdistinctをキーワードに検索するとたくさん登場します)


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#25 2006-03-14 11:40:07

mekyo
メンバー
登録日: 2005-11-22
投稿: 80

Re: SQLite版Nucleus3.3 βバージョン

SQLiteは ここに構文のっています。
http://www.sqlite.org/lang.html

Katsumi さんの発言:

『GROUP BY』『ORDER BY』は、現在調べています。

そこの selectのとこあたりをみると
http://www.sqlite.org/lang_select.html

『GROUP BY』『ORDER BY』は、載っています

試していませんが そのまま通る可能性ありです。

オフライン

Board footer