Did you see the Cordova-sqlite-storage plugin that I maintain? It
supports Windows 8.1, Windows Phone 8.1, and Windows 10 UWP in
addition to Android and iOS. It uses the SQLite3-WinRT C++ library
which I think is better than using .NET/C#.

The following test case works fine for me when I try it on Windows
8.1, Windows Phone 8.1, Windows 10 on desktop, and Windows 10 on
mobile device, all in Debug mode:

it(suiteName + 'XXX FTS4 test', function(done) {
          var db = openDatabase('xxx-fts4-test.db', '1.0', 'Test',
DEFAULT_SIZE);

          db.transaction(function(tx) {
            tx.executeSql("DROP TABLE IF EXISTS T1");
            tx.executeSql("DROP TABLE IF EXISTS T2");

            tx.executeSql("CREATE VIRTUAL TABLE T1 USING fts4(ID,VALUE)");
            tx.executeSql("CREATE VIRTUAL TABLE T2 USING fts4(ID,VALUE)");

            tx.executeSql("INSERT INTO T1 VALUES ('1','VALUE')");
            tx.executeSql("INSERT INTO T2 VALUES ('2','VALUE')");
          }, function(e) {
            // not expected:
            expect(false).toBe(true);
            expect(JSON.stringify(e)).toBe('---');
            done();
          }, function() {
            //console.log('first tx success cb OK');
            db.transaction(function(tx) {
              tx.executeSql("UPDATE T1 SET VALUE = 'value2' WHERE ID = '1'");
              tx.executeSql("UPDATE T2 SET VALUE = 'value2' WHERE ID = '2'");
            }, function(e) {
              // not expected:
              expect(false).toBe(true);
              expect(JSON.stringify(e)).toBe('---');
              done();
            }, function() {
              expect(true).toBe(true);
              done();
            });
          });
        }, MYTIMEOUT);

I am currently using SQLite 3.8.10.2 but would be happy to try it out
with 3.12.2 or 3.13.0 if you suspect a problem in a newer release.

On Mon, Jul 11, 2016 at 12:42 PM, Volford Bence
<volf...@mail.thot-soft.com> wrote:
> Dear SQLite developers,
>
> I'm creating a plugin under Cordova framework targeting Win10 (UWP), so my
> project is in c# with WinRT. I'm using SQLite3 successfully. I have the
> reference for the SQLite.Net.Core-PCL and SQLite.Net-PCL (v3.1.1), and added
> the SQLite3 for my Win10 project, using the SQLite.UWP.2015 version 3.13.0.
> I have to do some work on a given database with virtual tables, but whenever
> I want to update some row from 2 virtual table in a single transaction, my
> application breaks with a message in the attachment:
>
> Assertion failed!
> Program: ..\sqlite3.dll
> File: tsrc/fts3.c
> Line: 3772
> Expression: |((Fts3Table*)pVtab)->mxSavepoint <iSavepoint
> |
>
> I've tested when this can be throwed, I created a simple example, creating
> two virtual table, inserting some data, and in the next transaction, I'm
> updating the two data. The first update is ok, but the second one fails.
>
> |varpath
> =Path.Combine(ApplicationData.Current.LocalFolder.Path,"test.db");using(SQLiteConnectionconn
> =newSQLiteConnection(newSQLite.Net.Platform.WinRT.SQLitePlatformWinRT(),path)){try{conn.BeginTransaction();conn.Execute("CREATE
> VIRTUAL TABLE T1 USING fts4(ID,VALUE)"); //Just creating a test
> databaseconn.Execute("CREATE VIRTUAL TABLE T2 USING
> fts4(ID,VALUE)");conn.Execute("INSERT INTO T1 VALUES
> ('1','VALUE')");conn.Execute("INSERT INTO T2 VALUES
> ('2','VALUE')");conn.Commit();conn.BeginTransaction();conn.Execute("UPDATE
> T1 SET VALUE = 'value2' WHERE ID = '1'"); //Executed
> wellconn.Execute("UPDATE T2 SET VALUE = 'value2' WHERE ID = '2'");
> //Assertion Fail!conn.Commit();}catch(Exceptionex){Log.Error("Error occured
> "+ex.Message);}}|
>
> I found the rows in the fts3:
> https://github.com/mackyle/sqlite/blob/master/ext/fts3/fts3.c
>
> |/* ** The xSavepoint() method. ** ** Flush the contents of the
> pending-terms table to disk. */staticintfts3SavepointMethod(sqlite3_vtab
> *pVtab,intiSavepoint){intrc
> =SQLITE_OK;UNUSED_PARAMETER(iSavepoint);assert(((Fts3Table*)pVtab)->inTransaction
> );assert(((Fts3Table*)pVtab)->mxSavepoint <iSavepoint
> );TESTONLY(((Fts3Table*)pVtab)->mxSavepoint =iSavepoint
> );if(((Fts3Table*)pVtab)->bIgnoreSavepoint==0){rc
> =fts3SyncMethod(pVtab);}returnrc;}|
>
> If I'm running it in release mode, i don't get this error, because the
> asserts are excluded, and as i see, the rows are modified successfully, but
> in debug mode, throws me out always.
>
> I have to use all update in one transaction, because if some of them fail, I
> have to rollback everything. I tried with unique savepoint, but the same
> effect. I have the same problem if I target Win8.1 and WindowsPhone8.1 too
> with the corresponding sqlite binaries.
>
> Do you have any idea, how to resolve this, or why is this happening? Or
> maybe this is a bug? If the assert fails, maybe it have some effect on
> release mode too, but can't see now?
>
> Regards,
> Bence
>
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to