LGTM, except for 1 comment. > @@ -862,10 +861,6 @@ sqlite3AddDefaultValue(Parse * pParse, ExprSpan * pSpan) > * a primary key (and this is the second primary key) then create an > * error. > * > - * Set the Table.iPKey field of the table under construction to be the > - * index of the INTEGER PRIMARY KEY column. > - * Table.iPKey is set to -1 if there is no INTEGER PRIMARY KEY. > - * > * If the key is not an INTEGER PRIMARY KEY, then create a unique > * index for the key. No index is created for INTEGER PRIMARY KEYs. > */ > @@ -923,14 +918,24 @@ sqlite3AddPrimaryKey(Parse * pParse, /* Parsing context */ > (pTab->def->fields[iCol].type == FIELD_TYPE_INTEGER) && > sortOrder != SORT_ORDER_DESC) { > assert(autoInc == 0 || autoInc == 1); > - pTab->iPKey = iCol; > - pTab->keyConf = (u8) onError; > if (autoInc) { > pTab->iAutoIncPKey = iCol; > pTab->tabFlags |= TF_Autoincrement; > } > - if (pList) > - pParse->iPkSortOrder = pList->a[0].sort_order; > + struct sqlite3 *db = pParse->db; > + struct ExprList *list; > + struct Token token; > + sqlite3TokenInit(&token, pTab->def->fields[iCol].name); > + list = sql_expr_list_append(db, NULL, > + sqlite3ExprAlloc(db, TK_ID, > + &token, 0)); > + if (list == NULL) > + return; I guess here should also be goto primary_key_exit;