UNPKG

ydn.db

Version:

Javascript database library for IndexedDB, WebDatabase (WebSQL) and WebStorage (localStorage) storage mechanisms supporting version migration, advanced query and transaction workflow.

360 lines (316 loc) 14 kB
/** * @fileoverview About this file. * * User: kyawtun * Date: 15/12/12 */ goog.require('goog.debug.Console'); goog.require('goog.testing.jsunit'); goog.require('ydn.async'); goog.require('ydn.db.sql.Storage'); var test_select = function() { var sql = new ydn.db.Sql('SELECT * from st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertEquals('selList', null, sql.getSelList()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); sql = new ydn.db.Sql('SELECT f1 from st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('selList', ['f1'], sql.getSelList()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); sql = new ydn.db.Sql('SELECT f1, f2 from st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('selList', ['f1', 'f2'], sql.getSelList()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); sql = new ydn.db.Sql('SELECT (f3, f4) from st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('selList', ['f3', 'f4'], sql.getSelList()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); }; var test_order_by_none = function() { var sql = new ydn.db.Sql('SELECT * from st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertEquals('selList', null, sql.getSelList()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertUndefined('order', sql.getOrderBy()); }; var test_order_by = function() { var sql = new ydn.db.Sql('SELECT * from st1 ORDER BY f1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertEquals('selList', null, sql.getSelList()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('order', 'f1', sql.getOrderBy()); }; var test_where_int = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 WHERE x = 1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); var wheres = sql.getConditions(); var kr = wheres[0].getKeyRange(); assertEquals('# wheres ' + wheres, 1, wheres.length); assertEquals('lower', 1, kr.lower); assertEquals('lowerOpen', false, kr.lowerOpen); assertEquals('upper', 1, kr.upper); assertEquals('upperOpen', false, kr.upperOpen); }; var test_where_int_param = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 WHERE x = ?'); assertEquals('parse ok', '', sql.parse([1])); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); var wheres = sql.getConditions(); assertEquals('# wheres ' + wheres, 1, wheres.length); var kr = wheres[0].getKeyRange(); assertEquals('lower', 1, kr.lower); assertEquals('lowerOpen', false, kr.lowerOpen); assertEquals('upper', 1, kr.upper); assertEquals('upperOpen', false, kr.upperOpen); }; var test_where_float = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 WHERE x = 0.5'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); var wheres = sql.getConditions(); assertEquals('# wheres ' + wheres, 1, wheres.length); var kr = wheres[0].getKeyRange(); assertEquals('lower', 0.5, kr.lower); assertEquals('lowerOpen', false, kr.lowerOpen); assertEquals('upper', 0.5, kr.upper); assertEquals('upperOpen', false, kr.upperOpen); }; var test_where_double_quoted_string = function() { var sql = new ydn.db.Sql('SELECT * FROM st2 WHERE y = "1"'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st2'], sql.getStoreNames()); var wheres = sql.getConditions(); assertEquals('# wheres ' + wheres, 1, wheres.length); var kr = wheres[0].getKeyRange(); assertEquals('lower', '1', kr.lower); assertEquals('lowerOpen', false, kr.lowerOpen); assertEquals('upper', '1', kr.upper); assertEquals('upperOpen', false, kr.upperOpen); }; var test_where_single_quoted_string = function() { var sql = new ydn.db.Sql('SELECT * FROM st2 WHERE y = \'1\''); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st2'], sql.getStoreNames()); var wheres = sql.getConditions(); assertEquals('# wheres ' + wheres, 1, wheres.length); var kr = wheres[0].getKeyRange(); assertEquals('lower', '1', kr.lower); assertEquals('lowerOpen', false, kr.lowerOpen); assertEquals('upper', '1', kr.upper); assertEquals('upperOpen', false, kr.upperOpen); }; var test_where_gt = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 WHERE x > 2'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); var wheres = sql.getConditions(); assertEquals('# wheres ' + wheres, 1, wheres.length); var kr = wheres[0].getKeyRange(); assertEquals('lower', 2, kr.lower); assertEquals('lowerOpen', true, kr.lowerOpen); assertUndefined('upper', kr.upper); }; var test_where_gte = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 WHERE x >= 2'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); var wheres = sql.getConditions(); //console.log(wheres[0]) assertEquals('# wheres ' + wheres, 1, wheres.length); var kr = wheres[0].getKeyRange(); assertEquals('lower', 2, kr.lower); assertEquals('lowerOpen', false, kr.lowerOpen); assertUndefined('upper', kr.upper); }; var test_where_lt = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 WHERE x < 2'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); var wheres = sql.getConditions(); assertEquals('# wheres ' + wheres, 1, wheres.length); var kr = wheres[0].getKeyRange(); assertUndefined('lower', kr.lower); assertEquals('upper', 2, kr.upper); assertEquals('upperOpen', true, kr.upperOpen); }; var test_where_lte = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 WHERE x <= 2'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); var wheres = sql.getConditions(); assertEquals('# wheres ' + wheres, 1, wheres.length); var kr = wheres[0].getKeyRange(); assertUndefined('lower', kr.lower); assertEquals('upper', 2, kr.upper); assertEquals('upperOpen', false, kr.upperOpen); }; var test_where_bound = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 WHERE x >= 2 AND x < 4'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); var wheres = sql.getConditions(); assertEquals('# wheres ' + wheres, 1, wheres.length); var kr = wheres[0].getKeyRange(); assertEquals('lower', 2, kr.lower); assertEquals('lowerOpen', false, kr.lowerOpen); assertEquals('upper', 4, kr.upper); assertEquals('upperOpen', true, kr.upperOpen); }; var test_where_bound_param = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 WHERE x >= ? AND x < ?'); assertEquals('parse ok', '', sql.parse([4, 5])); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); var wheres = sql.getConditions(); assertEquals('# wheres ' + wheres, 1, wheres.length); var kr = wheres[0].getKeyRange(); assertEquals('lower', 4, kr.lower); assertEquals('lowerOpen', false, kr.lowerOpen); assertEquals('upper', 5, kr.upper); assertEquals('upperOpen', true, kr.upperOpen); }; var test_limit = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 LIMIT 5'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('limit', 5, sql.getLimit()); assertNaN('offset', sql.getOffset()); }; var test_offset = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 OFFSET 5'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertNaN('limit', sql.getLimit()); assertEquals('offset', 5, sql.getOffset()); }; var test_limit_offset = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 LIMIT 5 OFFSET 4'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('limit', 5, sql.getLimit()); assertEquals('offset', 4, sql.getOffset()); }; var test_offset_limit = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 OFFSET 1 LIMIT 2'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('limit', 2, sql.getLimit()); assertEquals('offset', 1, sql.getOffset()); }; var test_order = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 ORDER BY f1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('order by', 'f1', sql.getOrderBy()); assertFalse('dir', sql.isReversed()); }; var test_order_dir = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 ORDER BY f1 DESC'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('order by', 'f1', sql.getOrderBy()); assertTrue('dir', sql.isReversed()); }; var test_order_single_quote = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 ORDER BY \'field 1\''); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('order by', 'field 1', sql.getOrderBy()); }; var test_order_double_quote = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 ORDER BY "field 1"'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('order by', 'field 1', sql.getOrderBy()); }; var test_order_limit = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 ORDER BY f1 LIMIT 1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('order by', 'f1', sql.getOrderBy()); assertEquals('limit', 1, sql.getLimit()); assertNaN('offset', sql.getOffset()); }; var test_order_limit_offset = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 ORDER BY f1 LIMIT 1 OFFSET 2'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('order by', 'f1', sql.getOrderBy()); assertEquals('limit', 1, sql.getLimit()); assertEquals('offset', 2, sql.getOffset()); assertFalse('dir', sql.isReversed()); }; var test_order_limit_offset_dir = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 ORDER BY f1 DESC LIMIT 1 OFFSET 2'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('order by', 'f1', sql.getOrderBy()); assertEquals('limit', 1, sql.getLimit()); assertEquals('offset', 2, sql.getOffset()); assertTrue('dir', sql.isReversed()); }; var test_order_offset = function() { var sql = new ydn.db.Sql('SELECT * FROM st1 ORDER BY f1 OFFSET 2'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('order by', 'f1', sql.getOrderBy()); assertNaN('limit', sql.getLimit()); assertEquals('offset', 2, sql.getOffset()); }; var test_aggregate = function() { var sql = new ydn.db.Sql('SELECT COUNT(*) FROM st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('aggregate', 'COUNT', sql.getAggregate()); assertNull('fields', sql.getSelList()); sql = new ydn.db.Sql('SELECT MAX(*) FROM st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('aggregate', 'MAX', sql.getAggregate()); sql = new ydn.db.Sql('SELECT MIN(*) FROM st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('aggregate', 'MIN', sql.getAggregate()); sql = new ydn.db.Sql('SELECT AVG(*) FROM st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('aggregate', 'AVG', sql.getAggregate()); sql = new ydn.db.Sql('SELECT SUM(*) FROM st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('aggregate', 'SUM', sql.getAggregate()); }; var test_aggregate_field = function() { var sql = new ydn.db.Sql('SELECT COUNT(f2) FROM st1'); assertEquals('parse ok', '', sql.parse()); assertEquals('action', 'SELECT', sql.getAction()); assertArrayEquals('stores', ['st1'], sql.getStoreNames()); assertEquals('aggregate', 'COUNT', sql.getAggregate()); assertArrayEquals('fields', ['f2'], sql.getSelList()); };