Thanks for the patch, it gets further, but am still struggling a bit as it now looks like the xUpdate may not be being passed the arguments I am expecting. This could be a problem on our end, and I will debug it tomorrow to see if I can find out more details. If it's helpful for now, please see below for the results of the explain before and after applying the patch, as well as on a simple update that works. In both cases model_options_vt is an eponymous virtual table with a "name", "old_name" and "value" column where the primary key is "name". === Before patch === [ { "sql":"create table motable as select 'XMLFilePrecision' as name, '8' as value;", "time":0.001, "cols":[], "results":[ ] }, { "sql":"\n\nexplain update model_options_vt as mvt set value = t.value from motable as t where mvt.name = t.name;", "time":0, "cols":["addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment"], "results":[ [0, "Init", 0, 39, 0, "<Null>", 0, "Start at 39"], [1, "OpenEphemeral", 2, 5, 0, "<Null>", 0, "nColumn=5"], [2, "VOpen", 3, 0, 0, "vtab:1AD1236EFE0", 0, "<Null>"], [3, "OpenRead", 4, 4, 0, "2", 0, "root=4 iDb=0; motable"], [4, "Integer", 0, 11, 0, "<Null>", 0, "r[11]=0"], [5, "Integer", 0, 12, 0, "<Null>", 0, "r[12]=0"], [6, "VFilter", 3, 29, 11, "<Null>", 0, "iplan=r[11] zplan=''"], [7, "Once", 0, 16, 0, "<Null>", 0, "<Null>"], [8, "OpenAutoindex", 5, 3, 0, "k(3,B,,)", 0, "nColumn=3; for motable"], [9, "Rewind", 4, 16, 0, "<Null>", 0, "<Null>"], [10, "Column", 4, 0, 14, "<Null>", 0, "r[14]=motable.name"], [11, "Column", 4, 1, 15, "<Null>", 0, "r[15]=motable.value"], [12, "Rowid", 4, 16, 0, "<Null>", 0, "r[16]=rowid"], [13, "MakeRecord", 14, 3, 13, "<Null>", 0, "r[13]=mkrec(r[14..16])"], [14, "IdxInsert", 5, 13, 0, "<Null>", 16, "key=r[13]"], [15, "Next", 4, 10, 0, "<Null>", 3, "<Null>"], [16, "VColumn", 3, 0, 17, "<Null>", 0, "r[17]=vcolumn(0); model_options_vt.name"], [17, "SeekGE", 5, 28, 17, "1", 0, "key=r[17]"], [18, "IdxGT", 5, 28, 17, "1", 0, "key=r[17]"], [19, "Rowid", 3, 18, 0, "<Null>", 0, "r[18]=rowid"], [20, "Rowid", 3, 19, 0, "<Null>", 0, "r[19]=rowid"], [21, "VColumn", 3, 0, 20, "<Null>", 0, "r[20]=vcolumn(0); model_options_vt.name"], [22, "VColumn", 3, 1, 21, "<Null>", 0, "r[21]=vcolumn(1); model_options_vt.old_name"], [23, "Column", 5, 1, 22, "<Null>", 0, "r[22]=motable.value"], [24, "MakeRecord", 18, 5, 13, "<Null>", 0, "r[13]=mkrec(r[18..22])"], [25, "NewRowid", 2, 23, 0, "<Null>", 0, "r[23]=rowid"], [26, "Insert", 2, 13, 23, "<Null>", 8, "intkey=r[23] data=r[13]"], [27, "Next", 5, 18, 0, "<Null>", 0, "<Null>"], [28, "VNext", 3, 7, 0, "<Null>", 0, "<Null>"], [29, "Rewind", 2, 37, 0, "<Null>", 0, "<Null>"], [30, "Column", 2, 0, 6, "<Null>", 0, "r[6]="], [31, "Column", 2, 1, 7, "<Null>", 0, "r[7]="], [32, "Column", 2, 2, 8, "<Null>", 0, "r[8]="], [33, "Column", 2, 3, 9, "<Null>", 0, "r[9]="], [34, "Column", 2, 4, 10, "<Null>", 0, "r[10]="], [35, "VUpdate", 0, 5, 6, "vtab:1AD1236EFE0", 2, "data=r[6..10]"], [36, "Next", 2, 30, 0, "<Null>", 0, "<Null>"], [37, "Close", 2, 0, 0, "<Null>", 0, "<Null>"], [38, "Halt", 0, 0, 0, "<Null>", 0, "<Null>"], [39, "Transaction", 0, 1, 2, "0", 1, "usesStmtJournal=0"], [40, "VBegin", 0, 0, 0, "vtab:1AD1236EFE0", 0, "<Null>"], [41, "Goto", 0, 1, 0, "<Null>", 0, "<Null>"] ] }, { "sql":"\n\nupdate model_options_vt as mvt set value = t.value from motable as t where mvt.name = t.name ;", "time":0, "error":"Problem executing statement 'Failed to get rowid: Tried to access rowid on a table that doesn't have one'" } ] === After Patch === [ { "sql":"create table motable as select 'XMLFilePrecision' as name, '8' as value;", "time":0, "cols":[], "results":[ ] }, { "sql":"\n\nexplain update model_options_vt as mvt set value = t.value from motable as t where mvt.name = t.name;", "time":0, "cols":["addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment"], "results":[ [0, "Init", 0, 39, 0, "<Null>", 0, "Start at 39"], [1, "OpenEphemeral", 2, 5, 0, "<Null>", 0, "nColumn=5"], [2, "VOpen", 3, 0, 0, "vtab:26FF01314D0", 0, "<Null>"], [3, "OpenRead", 4, 4, 0, "2", 0, "root=4 iDb=0; motable"], [4, "Integer", 0, 11, 0, "<Null>", 0, "r[11]=0"], [5, "Integer", 0, 12, 0, "<Null>", 0, "r[12]=0"], [6, "VFilter", 3, 29, 11, "<Null>", 0, "iplan=r[11] zplan=''"], [7, "Once", 0, 16, 0, "<Null>", 0, "<Null>"], [8, "OpenAutoindex", 5, 3, 0, "k(3,B,,)", 0, "nColumn=3; for motable"], [9, "Rewind", 4, 16, 0, "<Null>", 0, "<Null>"], [10, "Column", 4, 0, 14, "<Null>", 0, "r[14]=motable.name"], [11, "Column", 4, 1, 15, "<Null>", 0, "r[15]=motable.value"], [12, "Rowid", 4, 16, 0, "<Null>", 0, "r[16]=rowid"], [13, "MakeRecord", 14, 3, 13, "<Null>", 0, "r[13]=mkrec(r[14..16])"], [14, "IdxInsert", 5, 13, 0, "<Null>", 16, "key=r[13]"], [15, "Next", 4, 10, 0, "<Null>", 3, "<Null>"], [16, "VColumn", 3, 0, 17, "<Null>", 0, "r[17]=vcolumn(0); model_options_vt.name"], [17, "SeekGE", 5, 28, 17, "1", 0, "key=r[17]"], [18, "IdxGT", 5, 28, 17, "1", 0, "key=r[17]"], [19, "VColumn", 3, 0, 18, "<Null>", 0, "r[18]=vcolumn(0); model_options_vt.name"], [20, "VColumn", 3, 0, 19, "<Null>", 0, "r[19]=vcolumn(0); model_options_vt.name"], [21, "VColumn", 3, 0, 20, "<Null>", 0, "r[20]=vcolumn(0); model_options_vt.name"], [22, "VColumn", 3, 1, 21, "<Null>", 0, "r[21]=vcolumn(1); model_options_vt.old_name"], [23, "Column", 5, 1, 22, "<Null>", 0, "r[22]=motable.value"], [24, "MakeRecord", 18, 5, 13, "<Null>", 0, "r[13]=mkrec(r[18..22])"], [25, "NewRowid", 2, 23, 0, "<Null>", 0, "r[23]=rowid"], [26, "Insert", 2, 13, 23, "<Null>", 8, "intkey=r[23] data=r[13]"], [27, "Next", 5, 18, 0, "<Null>", 0, "<Null>"], [28, "VNext", 3, 7, 0, "<Null>", 0, "<Null>"], [29, "Rewind", 2, 37, 0, "<Null>", 0, "<Null>"], [30, "Column", 2, 0, 6, "<Null>", 0, "r[6]="], [31, "Column", 2, 1, 7, "<Null>", 0, "r[7]="], [32, "Column", 2, 2, 8, "<Null>", 0, "r[8]="], [33, "Column", 2, 3, 9, "<Null>", 0, "r[9]="], [34, "Column", 2, 4, 10, "<Null>", 0, "r[10]="], [35, "VUpdate", 0, 5, 6, "vtab:26FF01314D0", 2, "data=r[6..10]"], [36, "Next", 2, 30, 0, "<Null>", 0, "<Null>"], [37, "Close", 2, 0, 0, "<Null>", 0, "<Null>"], [38, "Halt", 0, 0, 0, "<Null>", 0, "<Null>"], [39, "Transaction", 0, 1, 2, "0", 1, "usesStmtJournal=0"], [40, "VBegin", 0, 0, 0, "vtab:26FF01314D0", 0, "<Null>"], [41, "Goto", 0, 1, 0, "<Null>", 0, "<Null>"] ] }, { "sql":"\n\nupdate model_options_vt as mvt set value = t.value from motable as t where mvt.name = t.name ;", "time":0.002, "error":"Problem executing statement 'Caught exception updating table: Unable to convert 'XMLFilePrecision' to type 'int' for config. value 'XMLFilePrecision''" } ] === A simple update === [ { "sql":"\nexplain update model_options_vt set value='8' where name='XMLFilePrecision';", "time":0, "cols":["addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment"], "results":[ [0, "Init", 0, 15, 0, "<Null>", 0, "Start at 15"], [1, "Noop", 2, 5, 0, "<Null>", 0, "<Null>"], [2, "VOpen", 1, 0, 0, "vtab:26FA5A9C720", 0, "<Null>"], [3, "String8", 0, 15, 0, "XMLFilePrecision", 0, "r[15]='XMLFilePrecision'"], [4, "Integer", 1, 13, 0, "<Null>", 0, "r[13]=1"], [5, "Integer", 1, 14, 0, "<Null>", 0, "r[14]=1"], [6, "VFilter", 1, 14, 13, "<Null>", 0, "iplan=r[13] zplan=''"], [7, "VColumn", 1, 0, 8, "<Null>", 1, "r[8]=vcolumn(0)"], [8, "VColumn", 1, 1, 9, "<Null>", 1, "r[9]=vcolumn(1)"], [9, "String8", 0, 10, 0, "8", 0, "r[10]='8'"], [10, "VColumn", 1, 0, 6, "<Null>", 0, "r[6]=vcolumn(0)"], [11, "SCopy", 8, 7, 0, "<Null>", 0, "r[7]=r[8]"], [12, "Close", 1, 0, 0, "<Null>", 0, "<Null>"], [13, "VUpdate", 0, 5, 6, "vtab:26FA5A9C720", 2, "data=r[6..10]"], [14, "Halt", 0, 0, 0, "<Null>", 0, "<Null>"], [15, "Transaction", 0, 1, 1, "0", 1, "usesStmtJournal=0"], [16, "VBegin", 0, 0, 0, "vtab:26FA5A9C720", 0, "<Null>"], [17, "Goto", 0, 1, 0, "<Null>", 0, "<Null>"] ] }, { "sql":"\nupdate model_options_vt set value='8' where name='XMLFilePrecision';", "time":0, "cols":[], "results":[ ] } ]