ydn.db
Version:
Javascript database library for IndexedDB, WebDatabase (WebSQL) and WebStorage (localStorage) storage mechanisms supporting version migration, advanced query and transaction workflow.
107 lines (87 loc) • 2.95 kB
JavaScript
var db_name = 'test_query_logic';
var schema_1 = {
version: 1,
stores: [
{
name: 'st',
keyPath: 'id',
indexes: [
{name: 'name'},
{name: 'value'},
{name: 'name-value', keyPath: ['name', 'value']}
]
}
]
};
var db = new ydn.db.Storage(db_name, schema_1, options);
module('query,logic');
test('creating index query', function() {
var q = db.from('st').select('name');
var iter = q.getIterator();
equal(iter.getStoreName(), 'st', 'store name');
equal(iter.getIndexName(), 'name', 'index name');
equal(iter.getKeyRange(), null, 'key range');
equal(iter.isReversed(), false, 'reverse');
equal(iter.isUnique(), false, 'unique');
});
test('creating unique index query', function() {
var q = db.from('st').select('name').unique(true);
var iter = q.getIterator();
equal(iter.getIndexName(), 'name', 'index name');
equal(iter.getKeyRange(), null, 'key range');
equal(iter.isReversed(), false, 'reverse');
equal(iter.isUnique(), true, 'unique');
});
test('creating reverse index query', function() {
var q = db.from('st').select('name').reverse();
var iter = q.getIterator();
equal(iter.getIndexName(), 'name', 'index name');
equal(iter.getKeyRange(), null, 'key range');
equal(iter.isReversed(), true, 'reverse');
equal(iter.isUnique(), false, 'unique');
});
test('creating key range index query', function() {
var q = db.from('st');
q = q.where('value', '>=', 3, '<', 5);
var iter = q.getIterator();
var kr = iter.getKeyRange();
equal(iter.getStoreName(), 'st', 'store name');
equal(iter.getIndexName(), 'value', 'index name');
equal(kr.lower, 3, 'lower');
equal(kr.lowerOpen, false, 'lowerOpen');
equal(kr.lower, 3, 'upper');
equal(kr.upperOpen, true, 'upperOpen');
equal(iter.isReversed(), false, 'reverse');
equal(iter.isUnique(), false, 'unique');
});
test('natural ordering', function() {
var q = db.from('st');
deepEqual(q.getOrder(), [], 'natural ordering');
});
test('primary key ordering', function() {
var q = db.from('st').order('id');
deepEqual(q.getOrder(), ['id'], 'order by primary key');
});
test('ordering by index', function() {
var q = db.from('st').order('value');
var iter = q.getIterator();
equal(iter.getIndexName(), 'value', 'index');
deepEqual(q.getOrder(), ['value']);
});
test('selection', function() {
var q = db.from('st').select('name');
deepEqual(q.getOrder(), ['name'], 'order by selection');
var iter = q.getIterator();
equal(iter.getIndexName(), 'name');
});
test('filtering and ordering', function() {
var q = db.from('st').where('name', '=', '2');
q = q.order('value');
var iter = q.getIterator();
equal(iter.getIndexName(), 'name-value', 'filter and order');
var kr = iter.getKeyRange();
deepEqual(kr.lower, ['2'], 'lower key');
deepEqual(kr.upper, ['2', '\uffff'], 'upper key');
});
ydn.db.deleteDatabase(db.getName(), db.getType());
db.close();