- From: Marcos Caceres <w3c@marcosc.com>
- Date: Tue, 12 Feb 2013 17:00:31 +0000
- To: Kyaw Tun <kyawtun@yathit.com>
- Cc: "www-tag@w3.org" <www-tag@w3.org>
- Message-Id: <0791E36D-CB10-42E6-9E6D-AB1749809FE5@marcosc.com>
On 12/02/2013, at 5:02 AM, Kyaw Tun <kyawtun@yathit.com> wrote: > The criticisms on IndexedDB API by pointing out IndexedDB suck links is unfair. If they have enough time to play around it, they will love it. There are a lot of beauty in IndexedDB API like composite index, element-wise indexing, auto commit transaction, powerful serialisation and full reflection. Sorry, I didn't make myself very clear. The features of IndexedDB are not in question - they are all awesome, no doubt! It is the *interface* that humans use to interact with those features that appears to suck. > Arms with these it is very possible to write butter smooth database library. > > I would like to point out my own open source library as an example: https://bitbucket.org/ytkyaw/ydn-db Everything below looks awesome! Why did you feel it was necessary to write a layer on top of IndexedDB? > . > The library features: > > Support all features of asynchronous IndexedDB API. > Well tested closure library module. > Fixed schema, auto versioning, on-the-fly schema generation while maintaining multiple connections (on tabs, or worker). > Low-level cursor iteration, high level query and key joining algorithms. > Each method call is an atomic transaction, while supporting transaction and advance transaction workflow. > > CRUD operations : > var db = new ydn.db.Storage('test-store'); > db.put('store1', {test: 'Hello World!'}, 123); > var req = db.get('store1', 123).done(function(record) { > > console.log(record); > > }); > > > > Basic query > > var lower = + new Date(1942, 1, 1); // 1942 February 1 > > var upper = + new Date(1942, 2, 1); // 1942 March 1 > > var iter = ydn.db.IndexValueCursors.where('author', 'born', '>=', lower, '<', upper); > > db.values(iter).done(function(records) { > > console.log(records); > > records.map(function(x) { > > console.log(x.first + ' ' + x.last + ' ' + new Date(x.born)); > > }); > > }); > > Advanced query for: SELECT * FROM article WHERE license = 'SA' AND publisher = 'Nature' ORDER BY 'title' > > > var license_sa_iter = ydn.db.Cursors.where('article', 'license, title', '^', ['SA']); > > var publisher_nature_iter = ydn.db.Cursors.where('article', 'publisher, title', '^', ['Nature']); > > var match_keys = []; > > var solver = new ydn.db.algo.ZigzagMerge(match_keys); > > var req = db.scan([license_sa_iter, publisher_nature_iter], solver); > > req.then(function() { > > db.list('article', match_keys).done(function(results) { > > console.log(results); > > }); > }, function(e) { > > throw e; > > });
Received on Tuesday, 12 February 2013 17:01:17 UTC