|
1 | | -var assert = require("assert"); |
2 | | -var sql = require('../js/sql.js'); |
| 1 | +exports.test = function(sql, assert){ |
| 2 | + // Create a database |
| 3 | + var db = new sql.Database(); |
3 | 4 |
|
4 | | -// Create a database |
5 | | -var db = new sql.Database(); |
| 5 | + // Execute some sql |
| 6 | + sqlstr = "CREATE TABLE alphabet (letter, code);"; |
| 7 | + db.exec(sqlstr); |
6 | 8 |
|
7 | | -// Execute some sql |
8 | | -sqlstr = "CREATE TABLE alphabet (letter, code);"; |
9 | | -db.exec(sqlstr); |
| 9 | + var result = db.exec("SELECT name FROM sqlite_master WHERE type='table'"); |
| 10 | + assert.deepEqual(result, [{columns:['name'], values:[['alphabet']]}], |
| 11 | + "Table properly created"); |
10 | 12 |
|
11 | | -var result = db.exec("SELECT name FROM sqlite_master WHERE type='table'"); |
12 | | -assert.deepEqual(result, [{columns:['name'], values:[['alphabet']]}]); |
| 13 | + // Prepare a statement to insert values in tha database |
| 14 | + var stmt = db.prepare("INSERT INTO alphabet (letter,code) VALUES (?,?)"); |
| 15 | + // Execute the statement several times |
| 16 | + stmt.run(['a',1]); |
| 17 | + stmt.run(['b',2.2]); |
| 18 | + stmt.run(['c']); // The second parameter will be bound to NULL |
13 | 19 |
|
14 | | -console.log("Testing prepared statements..."); |
15 | | -// Prepare a statement to insert values in tha database |
16 | | -var stmt = db.prepare("INSERT INTO alphabet (letter,code) VALUES (?,?)"); |
17 | | -console.log("Testing Statement.run()"); |
18 | | -// Execute the statement several times |
19 | | -stmt.run(['a',1]); |
20 | | -stmt.run(['b',2.2]); |
21 | | -stmt.run(['c']); // The second parameter will be bound to NULL |
| 20 | + // Free the statement |
| 21 | + stmt.free(); |
22 | 22 |
|
23 | | -console.log("Testing statement.free()"); |
24 | | -// Free the statement |
25 | | -stmt.free(); |
| 23 | + result = db.exec("SELECT * FROM alphabet"); |
| 24 | + assert.deepEqual(result, |
| 25 | + [{columns:['letter', 'code'], values:[['a','1'],['b','2.2'],['c','']]}], |
| 26 | + "Statement.run() should have added data to the database"); |
26 | 27 |
|
27 | | -result = db.exec("SELECT * FROM alphabet"); |
28 | | -assert.deepEqual(result, [{columns:['letter', 'code'], values:[['a','1'],['b','2.2'],['c','']]}]); |
| 28 | + var stmt = db.prepare("select 5 as nbr, '粵語😄' as str, null as nothing;"); |
| 29 | + stmt.step(); // Run the statement |
| 30 | + assert.deepEqual(stmt.getColumnNames(), ['nbr','str','nothing'], 'Statement.GetColumnNames()'); |
| 31 | + var res = stmt.getAsObject(); |
| 32 | + assert.strictEqual(res.nbr, 5, 'Read number'); |
| 33 | + assert.strictEqual(res.str, '粵語😄', "Read string"); |
| 34 | + assert.strictEqual(res.nothing, null, "Read null"); |
| 35 | + assert.deepEqual(res, {nbr:5, str:'粵語😄', nothing:null}, "Statement.getAsObject()"); |
| 36 | + stmt.free(); |
29 | 37 |
|
30 | | -console.log("Testing getting data..."); |
| 38 | + // Prepare an sql statement |
| 39 | + var stmt = db.prepare("SELECT * FROM alphabet WHERE code BETWEEN :start AND :end ORDER BY code"); |
| 40 | + // Bind values to the parameters |
| 41 | + stmt.bind([0, 256]); |
| 42 | + // Execute the statement |
| 43 | + stmt.step(); |
| 44 | + // Get one row of result |
| 45 | + result = stmt.get(); |
| 46 | + assert.deepEqual(result, ['a',1], "Binding named parameters by their position"); |
31 | 47 |
|
32 | | -var stmt = db.prepare("select 5 as nbr, '粵語😄' as str, null as nothing;"); |
33 | | -stmt.step(); // Run the statement |
34 | | -assert.deepEqual(stmt.getColumnNames(), ['nbr','str','nothing']); |
35 | | -var res = stmt.getAsObject(); |
36 | | -assert.strictEqual(res.nbr, 5); |
37 | | -assert.strictEqual(res.str, '粵語😄'); |
38 | | -assert.strictEqual(res.nothing, null); |
39 | | -assert.deepEqual(res, {nbr:5, str:'粵語😄', nothing:null}); |
40 | | -stmt.free(); |
| 48 | + // Fetch the next row of result |
| 49 | + result = stmt.step(); |
| 50 | + assert.equal(result, true); |
| 51 | + result = stmt.get(); |
| 52 | + assert.deepEqual(result, ['b',2.2], "Fetching the next row of result"); |
41 | 53 |
|
42 | | -// Prepare an sql statement |
43 | | -var stmt = db.prepare("SELECT * FROM alphabet WHERE code BETWEEN :start AND :end ORDER BY code"); |
44 | | -// Bind values to the parameters |
45 | | -stmt.bind([0, 256]); |
46 | | -// Execute the statement |
47 | | -stmt.step(); |
48 | | -// Get one row of result |
49 | | -result = stmt.get(); |
50 | | -assert.deepEqual(result, ['a',1]); |
| 54 | + // Reset and reuse at once |
| 55 | + result = stmt.get([0, 1]); |
| 56 | + assert.deepEqual(result, ['a',1], "Reset and reuse at once"); |
51 | 57 |
|
52 | | -// Fetch the next row of result |
53 | | -result = stmt.step(); |
54 | | -assert.equal(result, true); |
55 | | -result = stmt.get(); |
56 | | -assert.deepEqual(result, ['b',2.2]); |
| 58 | + // Pass objects to get() and bind() to use named parameters |
| 59 | + result = stmt.get({':start':1, ':end':1}); |
| 60 | + assert.deepEqual(result, ['a',1], "Binding named parameters"); |
57 | 61 |
|
58 | | -// Reset and reuse at once |
59 | | -result = stmt.get([0, 1]); |
60 | | -assert.deepEqual(result, ['a',1]); |
| 62 | + // Close the database and all associated statements |
| 63 | + db.close(); |
| 64 | +} |
61 | 65 |
|
62 | | -// Pass objects to get() and bind() to use named parameters |
63 | | -result = stmt.get({':start':1, ':end':1}); |
64 | | -assert.deepEqual(result, ['a',1]); |
65 | | - |
66 | | -// free the memory used by the statement |
67 | | -stmt.free(); |
68 | | -// You can not use your statement anymore once it has been freed. |
69 | | -// But not freeing your statements causes memory leaks. You don't want that. |
| 66 | +if (module == require.main) { |
| 67 | + var sql = require('../js/sql.js'); |
| 68 | + var assert = require("assert"); |
| 69 | + exports.test(sql, assert); |
| 70 | +} |
0 commit comments