Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/70insert.js
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ yy.Insert.prototype.compile = function (databaseid) {
return statement;
} else {
// console.log(224,table.defaultfns);
var defaultfns = 'return alasql.utils.extend(r,{' + table.defaultfns + '})';
var defaultfns = 'return alasql.utils.extend({' + table.defaultfns + '},r)';
var defaultfn = new Function('r,db,params,alasql', defaultfns);
var insertfn = function (db, params, alasql) {
var res = selectfn(params).data;
Expand Down
75 changes: 75 additions & 0 deletions test/test_insert_from_param.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
if (typeof exports === 'object') {
var assert = require('assert');
var alasql = require('..');
}

describe('Test INSERT FROM parameter issue', function () {
it('INSERT INTO table SELECT * FROM ? with data array', function (done) {
// Create a new database like in the issue
var inmemDB = new alasql.Database('test_insert_db');

// Create table
var query =
"CREATE TABLE IF NOT EXISTS [BCPartners] (RecordNum INTEGER PRIMARY KEY AUTOINCREMENT, [TABLE_NAME] TEXT DEFAULT '', [BC] TEXT DEFAULT '')";
inmemDB.exec(query);

// Prepare test data
var data = [
{TABLE_NAME: 'Table1', BC: 'BC1'},
{TABLE_NAME: 'Table2', BC: 'BC2'},
{TABLE_NAME: 'Table3', BC: 'BC3'},
];

// Insert data
inmemDB.exec('INSERT INTO [BCPartners] SELECT * FROM ?', [data]);

// Verify data was inserted correctly
var result = inmemDB.exec('SELECT * FROM [BCPartners]');

console.log('Result:', JSON.stringify(result, null, 2));

assert.equal(result.length, 3, 'Should have 3 records');
assert.equal(result[0].TABLE_NAME, 'Table1', 'First record TABLE_NAME should be Table1');
assert.equal(result[0].BC, 'BC1', 'First record BC should be BC1');
assert.equal(result[1].TABLE_NAME, 'Table2', 'Second record TABLE_NAME should be Table2');
assert.equal(result[1].BC, 'BC2', 'Second record BC should be BC2');
assert.equal(result[2].TABLE_NAME, 'Table3', 'Third record TABLE_NAME should be Table3');
assert.equal(result[2].BC, 'BC3', 'Third record BC should be BC3');

// Clean up
alasql('DROP DATABASE test_insert_db');
done();
});

it('INSERT INTO table SELECT * FROM ? using default database', function (done) {
// Test with default database (alasql)
alasql('DROP TABLE IF EXISTS BCPartners');
alasql(
"CREATE TABLE BCPartners (RecordNum INTEGER PRIMARY KEY AUTOINCREMENT, TABLE_NAME TEXT DEFAULT '', BC TEXT DEFAULT '')"
);

// Prepare test data
var data = [
{TABLE_NAME: 'Table1', BC: 'BC1'},
{TABLE_NAME: 'Table2', BC: 'BC2'},
];

// Insert data
alasql('INSERT INTO BCPartners SELECT * FROM ?', [data]);

// Verify data was inserted correctly
var result = alasql('SELECT * FROM BCPartners');

console.log('Default DB Result:', JSON.stringify(result, null, 2));

assert.equal(result.length, 2, 'Should have 2 records');
assert.equal(result[0].TABLE_NAME, 'Table1', 'First record TABLE_NAME should be Table1');
assert.equal(result[0].BC, 'BC1', 'First record BC should be BC1');
assert.equal(result[1].TABLE_NAME, 'Table2', 'Second record TABLE_NAME should be Table2');
assert.equal(result[1].BC, 'BC2', 'Second record BC should be BC2');

// Clean up
alasql('DROP TABLE BCPartners');
done();
});
});
Loading