Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add JDBDatabase.getObjectStore() #6

Closed
wants to merge 1 commit into from
Closed

add JDBDatabase.getObjectStore() #6

wants to merge 1 commit into from

Conversation

pikotea
Copy link

@pikotea pikotea commented Feb 24, 2012

JDBObjectStore()のoptionsにdatabaseを指定してnewするのは好みじゃないので、JDBDatabaseにgetObjectStore()を追加してみました。

@shumpei
Copy link
Owner

shumpei commented Feb 24, 2012

なるほど、了解です。ただ、「get」だと「あらかじめ存在するものを取得する」というニュアンスが強いように感じるんで、「createObjectStore()」とかにしようかなあ。

そうなると、getObjectStore(name)とかremoveObjectStore(name)とかも欲しくなりますね。

他、APIで気になるところとかあります?

@pikotea
Copy link
Author

pikotea commented Feb 24, 2012

そうか、openする前にcallしてるんですよね。

そうなると、JDBObjectStoreをopen前にオブジェクトをゲットできるのにも違和感が。
openする前には、定義だけ登録していて、DB開いてからgetObjectStore(name)する形でどうです?

var EmployeeDB = new JDBDatabase('EmployeeDB3', 1);
EmployeeDB.add([
name: 'EmployeeStore',
key: { path: 'id', autoIncrement: true },
indexes: {
ageIdx: { path: 'age' }
}
]);

EmployeeDB.open();

/* 何か */

var EmployeeStore = EmployeeDB.getObjectStore(name);

とかとか

@pikotea
Copy link
Author

pikotea commented Feb 24, 2012

割と斜め読みなので、もうちょっと中身を見ますね~。
バグフィクス以外は、決定してからpull requestしたほうが良さそうだ。

ObjectStoreの削除がないので白石さんが言うようにremoveObjectStore(name)は欲しいですが、
どちらにせよopen時しか実行できないので↑の方法で良いかなーと。定義が無ければremoveな感じで。

あとは定義を変更してそのままデータを移行するような場合がありますので、
データ更新用のfunctionも欲しいかなぁと。いろいろと面倒くさい^^;

@shumpei
Copy link
Owner

shumpei commented Feb 24, 2012

DBをオープンして、オブジェクトストアを作って、って流れが自然に思えますよね。
吉川さんの提案したAPIも悪くないですが、定義して、その後getするというのが二度手間で、今のAPIよりめんどくさくなるのが難点ですね。
例えば、open()を一番最初に持ってくるようにするとか。ただこれだと、JDBDatabase.open()時に、実際にはindexedDB.open()は呼ばないという感じになります(実際に呼ぶのはinit()時)が・・・

var db = JDBDatabase.open("EmployeeDB", 1);

var EmployeeStore = db.createObjectStore({
name: 'EmployeeStore'
});
var CompanyStore = db.createObjectStore({
name: 'CompanyStore'
});

db.init().success(function() {
});

@shumpei
Copy link
Owner

shumpei commented Feb 24, 2012

データ更新用のfunctionは、欲しい気持ちはすごくわかります。ぼくも、こないだ作っていたアプリで初期データの投入をDBアップグレード時にやりたかったので。
ただ、確かIE10がVERSION_CHANGEトランザクション中のput()を許容せずにエラーになっちゃうんですよ。だから、アップグレード時にデータ投入/更新は少しリスキーかも(ちなみにこないだ作っていたアプリでは、1秒おいてからデータ投入を行うことで、VERSION_CHANGEトランザクションのタイムアウトを待ちました・・・無理矢理過ぎる(^^; )

@pikotea
Copy link
Author

pikotea commented Feb 24, 2012

なんと。そもそもスキーマ変更が動的にできないのがいやらしいですよね。

白石さんの案でいくのが一番良さそうですね。
openとinitを逆にしてはどうでしょう?

var db = JDBDatabase.init("EmployeeDB", 1);

var EmployeeStore = db.createObjectStore({
name: 'EmployeeStore'
});
var CompanyStore = db.createObjectStore({
name: 'CompanyStore'
});

db.open().success(function() {
});

@shumpei
Copy link
Owner

shumpei commented Feb 25, 2012

白石さんの案でいくのが一番良さそうですね。
openとinitを逆にしてはどうでしょう?

なるほど、だとすると今とあんまり変わらないかな。
今はinit()ではなくnewでインスタンス作っているだけなので。

変更点としては、JDBObjectStoreの生成をnewではなくJDBDatabase.createObjectStore()でやる、というだけでもいいのかもしれません。メソッド名も、defineObjectStore()とかcreateStore()とかdefineStore()とか、いろいろ考えられそう。

ただ、瑣末な変更であることには変わりないので今は手を付けないでおいて、コードの分かりやすさだけではなく満たしたいユースケースとか、IndexedDB
APIと齟齬がないようにするとか、そういう方から考えてみてもいいかもしれませんね。

2012年2月25日2:20 pikotea
reply@reply.github.com:

なんと。そもそもスキーマ変更が動的にできないのがいやらしいですよね。

白石さんの案でいくのが一番良さそうですね。
openとinitを逆にしてはどうでしょう?

var db = JDBDatabase.init("EmployeeDB", 1);

var EmployeeStore = db.createObjectStore({
name: 'EmployeeStore'
});
var CompanyStore = db.createObjectStore({
name: 'CompanyStore'
});

db.open().success(function() {
});


Reply to this email directly or view it on GitHub:
#6 (comment)

@pikotea
Copy link
Author

pikotea commented Feb 25, 2012

そうですね。
イニシャルデータの登録以外にも、文字列の前方マッチ、後方マッチ、部分マッチが欲しかったり(恐らくfilterのaliasみたいな感じになりそうですが)とか。

というかこういう雑談はここですることじゃないですねw
あとで、まとめてポストしますー。

@pikotea pikotea closed this Feb 25, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants