google / lovefield

Lovefield is a relational database for web apps. Written in JavaScript, works cross-browser. Provides SQL-like APIs that are fast, safe, and easy to use.
https://google.github.io/lovefield/
Apache License 2.0
6.82k stars 367 forks source link

Error when trying to use persistentIndex(true) #260

Open danbritt opened 4 years ago

danbritt commented 4 years ago

Version: 2.1.12

Using persistentIndex(true) causes an error when calling schemaBuilder.connect(), making it unusable since you can't get past that step.

Code to reproduce: (link to jsfiddle: https://jsfiddle.net/ouwgrdtn/3/)

/**
* Running this the first time will create the database and insert a record, 
* but there will be no data in the pk index table
*
* Running this the second time gives an error when calling connect()
*
* If you change it to persistentIndex(false), it works fine.
*/
var sb = lf.schema.create('test_db', 1);

sb.createTable('Asset')
  .addColumn('id', lf.Type.NUMBER)
  .addColumn('asset', lf.Type.STRING)
  .addPrimaryKey(['id'])
  .persistentIndex(true);
 console.log('schema builder created');

// Schema is defined, now connect to the database instance.
sb.connect().then(async function(testDb) {
  console.log('connect successful');
  let localTable = testDb.getSchema().table('Asset');
  await testDb
    .insertOrReplace()
    .into(localTable)
    .values([
    localTable.createRow({ id: Date.now(), asset: 'test' })
  ])
    .exec();
  console.log('insert successful');
});

Screenshot of console errors: image

philesc commented 4 years ago

I can reproduce using edge Microsoft Edge 44.17763.831.0 Microsoft EdgeHTML 18.17763

I tried to use persistentIndex(true) because the connection is very, very slow on Edge (especially on a webview). This is 5/6sec on chrome -> 5/10minutes on edge depending of the database size.

Got this error : SCRIPT438: SCRIPT438: Object doesn't support property or method 'lb'

lb is the minified method getColumns() : https://github.com/google/lovefield/blob/master/lib/schema/table_builder.js#L613