亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? insert.c

?? 調用sqlite開源數據的小程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
      /* The following code runs first because the GOTO at the very top      ** of the program jumps to it.  Create the temporary table, then jump      ** back up and execute the SELECT code above.      */      sqlite3VdbeJumpHere(v, iInitCode);      sqlite3VdbeAddOp(v, OP_OpenVirtual, srcTab, 0);      sqlite3VdbeAddOp(v, OP_SetNumColumns, srcTab, nColumn);      sqlite3VdbeAddOp(v, OP_Goto, 0, iSelectLoop);      sqlite3VdbeResolveLabel(v, iCleanup);    }else{      sqlite3VdbeJumpHere(v, iInitCode);    }  }else{    /* This is the case if the data for the INSERT is coming from a VALUES    ** clause    */    NameContext sNC;    memset(&sNC, 0, sizeof(sNC));    sNC.pParse = pParse;    assert( pList!=0 );    srcTab = -1;    useTempTable = 0;    assert( pList );    nColumn = pList->nExpr;    for(i=0; i<nColumn; i++){      if( sqlite3ExprResolveNames(&sNC, pList->a[i].pExpr) ){        goto insert_cleanup;      }    }  }  /* Make sure the number of columns in the source data matches the number  ** of columns to be inserted into the table.  */  if( pColumn==0 && nColumn!=pTab->nCol ){    sqlite3ErrorMsg(pParse,        "table %S has %d columns but %d values were supplied",       pTabList, 0, pTab->nCol, nColumn);    goto insert_cleanup;  }  if( pColumn!=0 && nColumn!=pColumn->nId ){    sqlite3ErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId);    goto insert_cleanup;  }  /* If the INSERT statement included an IDLIST term, then make sure  ** all elements of the IDLIST really are columns of the table and   ** remember the column indices.  **  ** If the table has an INTEGER PRIMARY KEY column and that column  ** is named in the IDLIST, then record in the keyColumn variable  ** the index into IDLIST of the primary key column.  keyColumn is  ** the index of the primary key as it appears in IDLIST, not as  ** is appears in the original table.  (The index of the primary  ** key in the original table is pTab->iPKey.)  */  if( pColumn ){    for(i=0; i<pColumn->nId; i++){      pColumn->a[i].idx = -1;    }    for(i=0; i<pColumn->nId; i++){      for(j=0; j<pTab->nCol; j++){        if( sqlite3StrICmp(pColumn->a[i].zName, pTab->aCol[j].zName)==0 ){          pColumn->a[i].idx = j;          if( j==pTab->iPKey ){            keyColumn = i;          }          break;        }      }      if( j>=pTab->nCol ){        if( sqlite3IsRowid(pColumn->a[i].zName) ){          keyColumn = i;        }else{          sqlite3ErrorMsg(pParse, "table %S has no column named %s",              pTabList, 0, pColumn->a[i].zName);          pParse->nErr++;          goto insert_cleanup;        }      }    }  }  /* If there is no IDLIST term but the table has an integer primary  ** key, the set the keyColumn variable to the primary key column index  ** in the original table definition.  */  if( pColumn==0 ){    keyColumn = pTab->iPKey;  }  /* Open the temp table for FOR EACH ROW triggers  */  if( triggers_exist ){    sqlite3VdbeAddOp(v, OP_OpenPseudo, newIdx, 0);    sqlite3VdbeAddOp(v, OP_SetNumColumns, newIdx, pTab->nCol);  }      /* Initialize the count of rows to be inserted  */  if( db->flags & SQLITE_CountRows ){    iCntMem = pParse->nMem++;    sqlite3VdbeAddOp(v, OP_MemInt, 0, iCntMem);  }  /* Open tables and indices if there are no row triggers */  if( !triggers_exist ){    base = pParse->nTab;    sqlite3OpenTableAndIndices(pParse, pTab, base, OP_OpenWrite);  }  /* If the data source is a temporary table, then we have to create  ** a loop because there might be multiple rows of data.  If the data  ** source is a subroutine call from the SELECT statement, then we need  ** to launch the SELECT statement processing.  */  if( useTempTable ){    iBreak = sqlite3VdbeMakeLabel(v);    sqlite3VdbeAddOp(v, OP_Rewind, srcTab, iBreak);    iCont = sqlite3VdbeCurrentAddr(v);  }else if( pSelect ){    sqlite3VdbeAddOp(v, OP_Goto, 0, iSelectLoop);    sqlite3VdbeResolveLabel(v, iInsertBlock);  }  /* Run the BEFORE and INSTEAD OF triggers, if there are any  */  endOfLoop = sqlite3VdbeMakeLabel(v);  if( triggers_exist & TRIGGER_BEFORE ){    /* build the NEW.* reference row.  Note that if there is an INTEGER    ** PRIMARY KEY into which a NULL is being inserted, that NULL will be    ** translated into a unique ID for the row.  But on a BEFORE trigger,    ** we do not know what the unique ID will be (because the insert has    ** not happened yet) so we substitute a rowid of -1    */    if( keyColumn<0 ){      sqlite3VdbeAddOp(v, OP_Integer, -1, 0);    }else if( useTempTable ){      sqlite3VdbeAddOp(v, OP_Column, srcTab, keyColumn);    }else{      assert( pSelect==0 );  /* Otherwise useTempTable is true */      sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr);      sqlite3VdbeAddOp(v, OP_NotNull, -1, sqlite3VdbeCurrentAddr(v)+3);      sqlite3VdbeAddOp(v, OP_Pop, 1, 0);      sqlite3VdbeAddOp(v, OP_Integer, -1, 0);      sqlite3VdbeAddOp(v, OP_MustBeInt, 0, 0);    }    /* Create the new column data    */    for(i=0; i<pTab->nCol; i++){      if( pColumn==0 ){        j = i;      }else{        for(j=0; j<pColumn->nId; j++){          if( pColumn->a[j].idx==i ) break;        }      }      if( pColumn && j>=pColumn->nId ){        sqlite3ExprCode(pParse, pTab->aCol[i].pDflt);      }else if( useTempTable ){        sqlite3VdbeAddOp(v, OP_Column, srcTab, j);       }else{        assert( pSelect==0 ); /* Otherwise useTempTable is true */        sqlite3ExprCodeAndCache(pParse, pList->a[j].pExpr);      }    }    sqlite3VdbeAddOp(v, OP_MakeRecord, pTab->nCol, 0);    /* If this is an INSERT on a view with an INSTEAD OF INSERT trigger,    ** do not attempt any conversions before assembling the record.    ** If this is a real table, attempt conversions as required by the    ** table column affinities.    */    if( !isView ){      sqlite3TableAffinityStr(v, pTab);    }    sqlite3VdbeAddOp(v, OP_Insert, newIdx, 0);    /* Fire BEFORE or INSTEAD OF triggers */    if( sqlite3CodeRowTrigger(pParse, TK_INSERT, 0, TRIGGER_BEFORE, pTab,         newIdx, -1, onError, endOfLoop) ){      goto insert_cleanup;    }  }  /* If any triggers exists, the opening of tables and indices is deferred  ** until now.  */  if( triggers_exist && !isView ){    base = pParse->nTab;    sqlite3OpenTableAndIndices(pParse, pTab, base, OP_OpenWrite);  }  /* Push the record number for the new entry onto the stack.  The  ** record number is a randomly generate integer created by NewRowid  ** except when the table has an INTEGER PRIMARY KEY column, in which  ** case the record number is the same as that column.   */  if( !isView ){    if( keyColumn>=0 ){      if( useTempTable ){        sqlite3VdbeAddOp(v, OP_Column, srcTab, keyColumn);      }else if( pSelect ){        sqlite3VdbeAddOp(v, OP_Dup, nColumn - keyColumn - 1, 1);      }else{        sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr);      }      /* If the PRIMARY KEY expression is NULL, then use OP_NewRowid      ** to generate a unique primary key value.      */      sqlite3VdbeAddOp(v, OP_NotNull, -1, sqlite3VdbeCurrentAddr(v)+3);      sqlite3VdbeAddOp(v, OP_Pop, 1, 0);      sqlite3VdbeAddOp(v, OP_NewRowid, base, counterMem);      sqlite3VdbeAddOp(v, OP_MustBeInt, 0, 0);    }else{      sqlite3VdbeAddOp(v, OP_NewRowid, base, counterMem);    }#ifndef SQLITE_OMIT_AUTOINCREMENT    if( pTab->autoInc ){      sqlite3VdbeAddOp(v, OP_MemMax, counterMem, 0);    }#endif /* SQLITE_OMIT_AUTOINCREMENT */    /* Push onto the stack, data for all columns of the new entry, beginning    ** with the first column.    */    for(i=0; i<pTab->nCol; i++){      if( i==pTab->iPKey ){        /* The value of the INTEGER PRIMARY KEY column is always a NULL.        ** Whenever this column is read, the record number will be substituted        ** in its place.  So will fill this column with a NULL to avoid        ** taking up data space with information that will never be used. */        sqlite3VdbeAddOp(v, OP_Null, 0, 0);        continue;      }      if( pColumn==0 ){        j = i;      }else{        for(j=0; j<pColumn->nId; j++){          if( pColumn->a[j].idx==i ) break;        }      }      if( pColumn && j>=pColumn->nId ){        sqlite3ExprCode(pParse, pTab->aCol[i].pDflt);      }else if( useTempTable ){        sqlite3VdbeAddOp(v, OP_Column, srcTab, j);       }else if( pSelect ){        sqlite3VdbeAddOp(v, OP_Dup, i+nColumn-j, 1);      }else{        sqlite3ExprCode(pParse, pList->a[j].pExpr);      }    }    /* Generate code to check constraints and generate index keys and    ** do the insertion.    */    sqlite3GenerateConstraintChecks(pParse, pTab, base, 0, keyColumn>=0,                                   0, onError, endOfLoop);    sqlite3CompleteInsertion(pParse, pTab, base, 0,0,0,                            (triggers_exist & TRIGGER_AFTER)!=0 ? newIdx : -1);  }  /* Update the count of rows that are inserted  */  if( (db->flags & SQLITE_CountRows)!=0 ){    sqlite3VdbeAddOp(v, OP_MemIncr, iCntMem, 0);  }  if( triggers_exist ){    /* Close all tables opened */    if( !isView ){      sqlite3VdbeAddOp(v, OP_Close, base, 0);      for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){        sqlite3VdbeAddOp(v, OP_Close, idx+base, 0);      }    }    /* Code AFTER triggers */    if( sqlite3CodeRowTrigger(pParse, TK_INSERT, 0, TRIGGER_AFTER, pTab,          newIdx, -1, onError, endOfLoop) ){      goto insert_cleanup;    }  }  /* The bottom of the loop, if the data source is a SELECT statement  */  sqlite3VdbeResolveLabel(v, endOfLoop);  if( useTempTable ){    sqlite3VdbeAddOp(v, OP_Next, srcTab, iCont);    sqlite3VdbeResolveLabel(v, iBreak);    sqlite3VdbeAddOp(v, OP_Close, srcTab, 0);  }else if( pSelect ){    sqlite3VdbeAddOp(v, OP_Pop, nColumn, 0);    sqlite3VdbeAddOp(v, OP_Return, 0, 0);    sqlite3VdbeResolveLabel(v, iCleanup);  }  if( !triggers_exist ){    /* Close all tables opened */    sqlite3VdbeAddOp(v, OP_Close, base, 0);    for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){      sqlite3VdbeAddOp(v, OP_Close, idx+base, 0);    }  }#ifndef SQLITE_OMIT_AUTOINCREMENT  /* Update the sqlite_sequence table by storing the content of the  ** counter value in memory counterMem back into the sqlite_sequence  ** table.  */  if( pTab->autoInc ){    int iCur = pParse->nTab;    int base = sqlite3VdbeCurrentAddr(v);    sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0);    sqlite3VdbeAddOp(v, OP_OpenWrite, iCur, pDb->pSeqTab->tnum);    sqlite3VdbeAddOp(v, OP_SetNumColumns, iCur, 2);    sqlite3VdbeAddOp(v, OP_MemLoad, counterRowid, 0);    sqlite3VdbeAddOp(v, OP_NotNull, -1, base+7);    sqlite3VdbeAddOp(v, OP_Pop, 1, 0);    sqlite3VdbeAddOp(v, OP_NewRowid, iCur, 0);    sqlite3VdbeOp3(v, OP_String8, 0, 0, pTab->zName, 0);    sqlite3VdbeAddOp(v, OP_MemLoad, counterMem, 0);    sqlite3VdbeAddOp(v, OP_MakeRecord, 2, 0);    sqlite3VdbeAddOp(v, OP_Insert, iCur, 0);    sqlite3VdbeAddOp(v, OP_Close, iCur, 0);  }#endif  /*  ** Return the number of rows inserted. If this routine is   ** generating code because of a call to sqlite3NestedParse(), do not  ** invoke the callback function.  */  if( db->flags & SQLITE_CountRows && pParse->nested==0 && !pParse->trigStack ){    sqlite3VdbeAddOp(v, OP_MemLoad, iCntMem, 0);    sqlite3VdbeAddOp(v, OP_Callback, 1, 0);    sqlite3VdbeSetNumCols(v, 1);    sqlite3VdbeSetColName(v, 0, "rows inserted", P3_STATIC);  }insert_cleanup:  sqlite3SrcListDelete(pTabList);  sqlite3ExprListDelete(pList);  sqlite3SelectDelete(pSelect);  sqlite3IdListDelete(pColumn);}/*** Generate code to do a constraint check prior to an INSERT or an UPDATE.**** When this routine is called, the stack contains (from bottom to top)** the following values:****    1.  The rowid of the row to be updated before the update.  This**        value is omitted unless we are doing an UPDATE that involves a**        change to the record number.****    2.  The rowid of the row after the update.****    3.  The data in the first column of the entry after the update.****    i.  Data from middle columns...****    N.  The data in the last column of the entry after the update.**** The old rowid shown as entry (1) above is omitted unless both isUpdate** and rowidChng are 1.  isUpdate is true for UPDATEs and false for** INSERTs and rowidChng is true if the record number is being changed.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产伦精一区二区三区| 国产精品久久久久久久蜜臀| 日韩精品电影在线观看| 欧美日韩国产高清一区| 天堂久久一区二区三区| 6080午夜不卡| 精品中文字幕一区二区小辣椒 | 日韩精品乱码免费| 在线不卡中文字幕播放| 日韩avvvv在线播放| 精品区一区二区| 国产ts人妖一区二区| 中文字幕在线免费不卡| 欧洲av在线精品| 免费成人你懂的| 久久婷婷成人综合色| 成人高清在线视频| 亚洲综合自拍偷拍| 日韩一卡二卡三卡四卡| 国产成人一级电影| 一区二区理论电影在线观看| 制服丝袜国产精品| 大胆欧美人体老妇| 亚洲综合色婷婷| 精品久久久久久久人人人人传媒| 成人少妇影院yyyy| 午夜欧美电影在线观看| 精品福利视频一区二区三区| 99久久婷婷国产| 蜜臀av亚洲一区中文字幕| 国产精品美日韩| 欧美精品在线一区二区三区| 国产一区久久久| 亚洲精品久久久蜜桃| 精品三级av在线| 91麻豆国产福利在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美极品aⅴ影院| 欧美人牲a欧美精品| 成人激情午夜影院| 日韩av电影免费观看高清完整版| 中文av一区二区| 日韩三级视频中文字幕| 色综合久久久久综合体| 韩国欧美国产1区| 亚洲成人av电影| 中文成人av在线| 精品久久久久99| 欧美色欧美亚洲另类二区| 国产凹凸在线观看一区二区| 午夜亚洲国产au精品一区二区| 日本一区二区免费在线观看视频| 欧美电影影音先锋| 色综合色综合色综合色综合色综合 | 免费av网站大全久久| 亚洲日穴在线视频| 欧美激情在线观看视频免费| 欧美一区二区在线免费播放| 色婷婷久久久综合中文字幕| 高清日韩电视剧大全免费| 麻豆一区二区三| 亚洲123区在线观看| 一区二区三区蜜桃| 国产精品人成在线观看免费| 精品欧美一区二区久久| 日韩一级欧美一级| 欧美福利一区二区| 欧美性受xxxx黑人xyx| 91视频一区二区| 不卡视频在线看| 成人免费av网站| 成人精品小蝌蚪| 国产99久久久国产精品潘金| 国产一区二区三区在线观看精品| 日本欧美肥老太交大片| 丝瓜av网站精品一区二区| 一区二区三区**美女毛片| 亚洲人被黑人高潮完整版| 国产精品久久久久9999吃药| 国产日本欧美一区二区| 国产色产综合色产在线视频 | 国产亚洲精品中文字幕| 欧美mv日韩mv国产网站app| 日韩一区二区三区四区| 日韩一区二区高清| 日韩精品一区二区三区三区免费| 9191久久久久久久久久久| 欧美另类久久久品| 日韩亚洲欧美成人一区| 日韩午夜小视频| 精品久久一二三区| 国产偷国产偷亚洲高清人白洁 | 国产激情一区二区三区桃花岛亚洲| 久久99精品国产麻豆不卡| 六月丁香婷婷色狠狠久久| 久国产精品韩国三级视频| 国产一区二区伦理| 成人av影院在线| 91免费看片在线观看| 欧美少妇xxx| 欧美一级黄色片| 精品日本一线二线三线不卡| 中文字幕av资源一区| 亚洲精品视频一区| 首页国产丝袜综合| 国产精品99久久久久久宅男| 91在线无精精品入口| 欧美性色综合网| 日韩精品一区二区三区视频在线观看 | 亚洲精品国久久99热| 天天综合色天天| 国产不卡免费视频| 精品视频色一区| 337p粉嫩大胆色噜噜噜噜亚洲 | 精品国产1区二区| 国产精品国产a| 午夜精品久久久久久久99樱桃| 精品在线播放免费| 91免费看`日韩一区二区| 在线播放中文字幕一区| 国产亚洲自拍一区| 亚洲国产裸拍裸体视频在线观看乱了| 蜜臀久久99精品久久久久宅男| www.性欧美| 日韩一区二区三| 国产精品久久久久久久久快鸭 | 精品国产亚洲在线| 亚洲美女屁股眼交3| 久久av老司机精品网站导航| av影院午夜一区| 欧美videos大乳护士334| 亚洲男人的天堂一区二区| 国产自产视频一区二区三区| 在线视频你懂得一区二区三区| 精品国产制服丝袜高跟| 亚洲免费色视频| 岛国一区二区三区| 日韩一区二区在线观看视频 | 国产精品自拍网站| 欧美日韩在线播放一区| 久久久久久久久久久黄色| 午夜免费欧美电影| 在线一区二区三区做爰视频网站| 日韩欧美激情在线| 天堂在线亚洲视频| 日本精品视频一区二区| 亚洲国产精品t66y| 韩国欧美国产1区| 日韩免费观看高清完整版| 亚洲综合色在线| 91麻豆国产自产在线观看| 日本一区二区三区在线不卡| 国模套图日韩精品一区二区| 欧美久久久久久久久久 | 午夜婷婷国产麻豆精品| 色综合久久中文综合久久牛| 国产日产欧美一区二区三区| 麻豆91精品视频| 91麻豆精品国产91久久久久久久久 | 亚洲视频一二三区| 丰满亚洲少妇av| 久久久亚洲精华液精华液精华液| 奇米一区二区三区av| 91精品国产综合久久精品图片 | 国产精品午夜在线观看| 国内成人精品2018免费看| www一区二区| 狠狠网亚洲精品| 2014亚洲片线观看视频免费| 国内精品视频666| 国产亚洲1区2区3区| 国产成人av一区| 国产日产亚洲精品系列| 懂色av一区二区三区免费看| 精品sm捆绑视频| 国产精品正在播放| 日本一区二区动态图| 99久久免费精品高清特色大片| 亚洲色图.com| 色综合久久久久综合体| 亚洲一级二级在线| 欧美日韩一卡二卡三卡| 日本亚洲电影天堂| 日韩免费视频一区| 国产精品一区二区无线| 国产精品丝袜久久久久久app| 国产不卡在线一区| 日韩一区在线免费观看| 91激情在线视频| 日韩精品电影一区亚洲| 精品日韩99亚洲| 欧美人体做爰大胆视频| 蜜桃av一区二区三区| 欧美韩国日本不卡| 色综合久久六月婷婷中文字幕| 亚洲高清免费一级二级三级| 欧美一区二区免费观在线| 国产在线精品免费| 亚洲视频在线观看一区| 欧美久久久久免费|