SQLite Forum

update-from on without rowid virtual tables
Login
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":[
    ]
  }
]