jeudi 18 février 2016

How can I enable RECURSIVE CTE in Chrome Sqlite + WebSql?

I am currently working with a WEBSQL database in Chrome.

I have some sample code which uses a chrome based WebSQL database with recursive CTE (it can be easily pasted into a the developer javascript console to validate)

// Open Database
var db = window.openDatabase("MyTestDB", "1", "1", 5e6),
// function that you can execute with any sql
testSql = function(sql){
    db.transaction(function _go(tx){
        tx.executeSql(sql, [], done, done);
    })
},
done = function(){ console.log(arguments) },
// Sample CTE
cte_not_broken = `WITH RECURSIVE cnt(x) AS 
                (SELECT 1
                UNION ALL
                SELECT 2)
               SELECT * FROM cnt;`
cte_broken = `WITH RECURSIVE cnt(x) AS 
                (SELECT 1
                UNION ALL
                SELECT x+1 FROM cnt LIMIT 10)
               SELECT * FROM cnt;`

testSql(cte_not_broken)
// returns a SQLResultSet
// { x: 1, x: 2 }
testSql(cte_broken)
// returns a SQLError
// { code: 5, 
//   message: "could not prepare statement" }
testSql("SELECT sqlite_version()")
// returns a SQLResultSet
// { sqlite_version(): "3.8.7.4" }

If I run these same queries in the Sqlite Manager firefox extension these CTE queries do work. If I run them on a device (android/cordova using a SqlitePlugin) they queries do work.

Is there any way within Chrome to enable CTE?

Aucun commentaire:

Enregistrer un commentaire