|
| 1 | +var apiTemp = Runtime.stackAlloc(4); |
| 2 | + |
| 3 | +Module['open'] = function(filename) { |
| 4 | + var ret = Module['ccall']('sqlite3_open', 'number', ['string', 'number'], [filename, apiTemp]); |
| 5 | + if (ret) throw 'SQLite exception: ' + ret; |
| 6 | + return getValue(apiTemp, 'i32'); |
| 7 | +} |
| 8 | + |
| 9 | +Module['close'] = function(db) { |
| 10 | + var ret = Module['ccall']('sqlite3_close', 'number', ['number'], [db]); |
| 11 | + if (ret) throw 'SQLite exception: ' + ret; |
| 12 | +} |
| 13 | + |
| 14 | +var callbackTemp = FUNCTION_TABLE.length; |
| 15 | +FUNCTION_TABLE.push(0, 0); |
| 16 | + |
| 17 | +Module['exec'] = function(db, sql, callback) { |
| 18 | + setValue(apiTemp, 0, 'i32'); |
| 19 | + FUNCTION_TABLE[callbackTemp] = function(notUsed, argc, argv, colNames) { |
| 20 | + var data = []; |
| 21 | + for (var i = 0; i < argc; i++) { |
| 22 | + data.push({ |
| 23 | + column: Pointer_stringify(getValue(colNames + i*Runtime.QUANTUM_SIZE, 'i32')), |
| 24 | + value: Pointer_stringify(getValue(argv + i*Runtime.QUANTUM_SIZE, 'i32')) |
| 25 | + }); |
| 26 | + } |
| 27 | + callback(data); |
| 28 | + }; |
| 29 | + var ret = Module['ccall']('sqlite3_exec', 'number', ['number', 'string', 'number', 'number', 'number'], [db, sql, callbackTemp, 0, apiTemp]); |
| 30 | + var errPtr = getValue(apiTemp, 'i32'); |
| 31 | + if (ret || errPtr) { |
| 32 | + var msg = 'SQLite exception: ' + ret + ', ' + (errPtr ? Pointer_stringify(errPtr) : ''); |
| 33 | + if (errPtr) _sqlite3_free(errPtr); |
| 34 | + throw msg; |
| 35 | + } |
| 36 | +} |
| 37 | + |
0 commit comments