您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ sqlite3DeleteTrigger函数代码示例

51自学网 2021-06-03 08:13:48
  C++
这篇教程C++ sqlite3DeleteTrigger函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中sqlite3DeleteTrigger函数的典型用法代码示例。如果您正苦于以下问题:C++ sqlite3DeleteTrigger函数的具体用法?C++ sqlite3DeleteTrigger怎么用?C++ sqlite3DeleteTrigger使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了sqlite3DeleteTrigger函数的18个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: sqlite3UnlinkAndDeleteTrigger

/*** Remove a trigger from the hash tables of the sqlite* pointer.*/void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){  Trigger *pTrigger;  int nName = strlen(zName);  pTrigger = (Trigger*)sqlite3HashInsert(&(db->aDb[iDb].pSchema->trigHash),                               zName, nName, 0);  if( pTrigger ){    Table *pTable = tableOfTrigger(pTrigger);    assert( pTable!=0 );    if( pTable->pTrigger == pTrigger ){      pTable->pTrigger = pTrigger->pNext;    }else{      Trigger *cc = pTable->pTrigger;      while( cc ){         if( cc->pNext == pTrigger ){          cc->pNext = cc->pNext->pNext;          break;        }        cc = cc->pNext;      }      assert(cc);    }    sqlite3DeleteTrigger(pTrigger);    db->flags |= SQLITE_InternChanges;  }}
开发者ID:DoktahWorm,项目名称:rhodes,代码行数:28,


示例2: sqlite3SchemaClear

/*** Free all resources held by the schema structure. The void* argument points** at a Schema struct. This function does not call sqlite3DbFree(db, ) on the ** pointer itself, it just cleans up subsidiary resources (i.e. the contents** of the schema hash tables).**** The Schema.cache_size variable is not cleared.*/void sqlite3SchemaClear(void *p){  Hash temp1;  Hash temp2;  HashElem *pElem;  Schema *pSchema = (Schema *)p;  temp1 = pSchema->tblHash;  temp2 = pSchema->trigHash;  sqlite3HashInit(&pSchema->trigHash);  sqlite3HashClear(&pSchema->idxHash);  for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){    sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem));  }  sqlite3HashClear(&temp2);  sqlite3HashInit(&pSchema->tblHash);  for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){    Table *pTab = sqliteHashData(pElem);    sqlite3DeleteTable(0, pTab);  }  sqlite3HashClear(&temp1);  sqlite3HashClear(&pSchema->fkeyHash);  pSchema->pSeqTab = 0;  if( pSchema->schemaFlags & DB_SchemaLoaded ){    pSchema->iGeneration++;  }  pSchema->schemaFlags &= ~(DB_SchemaLoaded|DB_ResetWanted);}
开发者ID:cznic,项目名称:cc,代码行数:35,


示例3: sqlite3SchemaFree

/*** Free all resources held by the schema structure. The void* argument points** at a Schema struct. This function does not call sqlite3DbFree(db, ) on the ** pointer itself, it just cleans up subsiduary resources (i.e. the contents** of the schema hash tables).**** The Schema.cache_size variable is not cleared.*/void sqlite3SchemaFree(void *p){  Hash temp1;  Hash temp2;  HashElem *pElem;  Schema *pSchema = (Schema *)p;  temp1 = pSchema->tblHash;  temp2 = pSchema->trigHash;  sqlite3HashInit(&pSchema->trigHash);  sqlite3HashClear(&pSchema->idxHash);  for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){    sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem));  }  sqlite3HashClear(&temp2);  sqlite3HashInit(&pSchema->tblHash);  for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){    Table *pTab = sqliteHashData(pElem);    assert( pTab->dbMem==0 );    sqlite3DeleteTable(pTab);  }  sqlite3HashClear(&temp1);  sqlite3HashClear(&pSchema->fkeyHash);  pSchema->pSeqTab = 0;  pSchema->flags &= ~DB_SchemaLoaded;}
开发者ID:Adoni,项目名称:WiEngine,代码行数:33,


示例4: sqlite3UnlinkAndDeleteTrigger

/*** Remove a trigger from the hash tables of the sqlite* pointer.*/void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){  Hash *pHash = &(db->aDb[iDb].pSchema->trigHash);  Trigger *pTrigger;  pTrigger = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), 0);  if( ALWAYS(pTrigger) ){    if( pTrigger->pSchema==pTrigger->pTabSchema ){      Table *pTab = tableOfTrigger(pTrigger);      Trigger **pp;      for(pp=&pTab->pTrigger; *pp!=pTrigger; pp=&((*pp)->pNext));      *pp = (*pp)->pNext;    }    sqlite3DeleteTrigger(db, pTrigger);    db->flags |= SQLITE_InternChanges;  }}
开发者ID:Ramananda,项目名称:sqlcipher,代码行数:18,


示例5: sqlite3UnlinkAndDeleteTrigger

/*** Remove a trigger from the hash tables of the sqlite* pointer.*/void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){  Trigger *pTrigger;  Hash *pHash;  assert( sqlite3SchemaMutexHeld(db, iDb, 0) );  pHash = &(db->aDb[iDb].pSchema->trigHash);  pTrigger = sqlite3HashInsert(pHash, zName, 0);  if( ALWAYS(pTrigger) ){    if( pTrigger->pSchema==pTrigger->pTabSchema ){      Table *pTab = tableOfTrigger(pTrigger);      Trigger **pp;      for(pp=&pTab->pTrigger; *pp!=pTrigger; pp=&((*pp)->pNext));      *pp = (*pp)->pNext;    }    sqlite3DeleteTrigger(db, pTrigger);    db->mDbFlags |= DBFLAG_SchemaChange;  }}
开发者ID:cznic,项目名称:cc,代码行数:21,


示例6: sqlite3SchemaFree

/*** Free all resources held by the schema structure. The void* argument points** at a Schema struct. This function does not call sqliteFree() on the ** pointer itself, it just cleans up subsiduary resources (i.e. the contents** of the schema hash tables).*/void sqlite3SchemaFree(void *p){  Hash temp1;  Hash temp2;  HashElem *pElem;  Schema *pSchema = (Schema *)p;  temp1 = pSchema->tblHash;  temp2 = pSchema->trigHash;  sqlite3HashInit(&pSchema->trigHash, SQLITE_HASH_STRING, 0);  sqlite3HashClear(&pSchema->aFKey);  sqlite3HashClear(&pSchema->idxHash);  for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){    sqlite3DeleteTrigger((Trigger*)sqliteHashData(pElem));  }  sqlite3HashClear(&temp2);  sqlite3HashInit(&pSchema->tblHash, SQLITE_HASH_STRING, 0);  for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){    Table *pTab = sqliteHashData(pElem);    sqlite3DeleteTable(0, pTab);  }  sqlite3HashClear(&temp1);  pSchema->pSeqTab = 0;  pSchema->flags &= ~DB_SchemaLoaded;}
开发者ID:DrEastex,项目名称:Platinum,代码行数:30,


示例7: sqlite3FinishTrigger

/*** This routine is called after all of the trigger actions have been parsed** in order to complete the process of building the trigger.*/void sqlite3FinishTrigger(  Parse *pParse,          /* Parser context */  TriggerStep *pStepList, /* The triggered program */  Token *pAll             /* Token that describes the complete CREATE TRIGGER */){  Trigger *nt = 0;          /* The trigger whose construction is finishing up */  sqlite *db = pParse->db;  /* The database */  DbFixer sFix;  if( pParse->nErr || pParse->pNewTrigger==0 ) goto triggerfinish_cleanup;  nt = pParse->pNewTrigger;  pParse->pNewTrigger = 0;  nt->step_list = pStepList;  while( pStepList ){    pStepList->pTrig = nt;    pStepList = pStepList->pNext;  }  if( sqlite3FixInit(&sFix, pParse, nt->iDb, "trigger", &nt->nameToken)           && sqlite3FixTriggerStep(&sFix, nt->step_list) ){    goto triggerfinish_cleanup;  }  /* if we are not initializing, and this trigger is not on a TEMP table,   ** build the sqlite_master entry  */  if( !db->init.busy ){    static VdbeOpList insertTrig[] = {      { OP_NewRecno,   0, 0,  0          },      { OP_String8,     0, 0,  "trigger"  },      { OP_String8,     0, 0,  0          },  /* 2: trigger name */      { OP_String8,     0, 0,  0          },  /* 3: table name */      { OP_Integer,    0, 0,  0          },      { OP_String8,     0, 0,  "CREATE TRIGGER "},      { OP_String8,     0, 0,  0          },  /* 6: SQL */      { OP_Concat8,     2, 0,  0          },       { OP_MakeRecord, 5, 0,  "tttit"    },      { OP_PutIntKey,  0, 0,  0          },    };    int addr;    Vdbe *v;    /* Make an entry in the sqlite_master table */    v = sqlite3GetVdbe(pParse);    if( v==0 ) goto triggerfinish_cleanup;    sqlite3BeginWriteOperation(pParse, 0, nt->iDb);    sqlite3OpenMasterTable(v, nt->iDb);    addr = sqlite3VdbeAddOpList(v, ArraySize(insertTrig), insertTrig);    sqlite3VdbeChangeP3(v, addr+2, nt->name, 0);     sqlite3VdbeChangeP3(v, addr+3, nt->table, 0);     sqlite3VdbeChangeP3(v, addr+6, pAll->z, pAll->n);    if( nt->iDb!=0 ){      sqlite3ChangeCookie(db, v, nt->iDb);    }    sqlite3VdbeAddOp(v, OP_Close, 0, 0);    sqlite3EndWriteOperation(pParse);  }  if( !pParse->explain ){    Table *pTab;    sqlite3HashInsert(&db->aDb[nt->iDb].trigHash,                      nt->name, strlen(nt->name)+1, nt);    pTab = sqlite3LocateTable(pParse, nt->table, db->aDb[nt->iTabDb].zName);    assert( pTab!=0 );    nt->pNext = pTab->pTrigger;    pTab->pTrigger = nt;    nt = 0;  }triggerfinish_cleanup:  sqlite3DeleteTrigger(nt);  sqlite3DeleteTrigger(pParse->pNewTrigger);  pParse->pNewTrigger = 0;  sqlite3DeleteTriggerStep(pStepList);}
开发者ID:open2cerp,项目名称:Open2C-ERP,代码行数:78,


示例8: sqlite3_db_status

/* ** Query status information for a single database connection */SQLITE_API int sqlite3_db_status(                                 sqlite3 *db,          /* The database connection whose status is desired */                                 int op,               /* Status verb */                                 int *pCurrent,        /* Write current value here */                                 int *pHighwater,      /* Write high-water mark here */                                 int resetFlag         /* Reset high-water mark if true */){    int rc = SQLITE_OK;   /* Return code */    sqlite3_mutex_enter(db->mutex);    switch( op ){        case SQLITE_DBSTATUS_LOOKASIDE_USED: {            *pCurrent = db->lookaside.nOut;            *pHighwater = db->lookaside.mxOut;            if( resetFlag ){                db->lookaside.mxOut = db->lookaside.nOut;            }            break;        }                    case SQLITE_DBSTATUS_LOOKASIDE_HIT:        case SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE:        case SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: {            testcase( op==SQLITE_DBSTATUS_LOOKASIDE_HIT );            testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE );            testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL );            assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)>=0 );            assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)<3 );            *pCurrent = 0;            *pHighwater = db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT];            if( resetFlag ){                db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT] = 0;            }            break;        }                        /*             ** Return an approximation for the amount of memory currently used             ** by all pagers associated with the given database connection.  The             ** highwater mark is meaningless and is returned as zero.             */        case SQLITE_DBSTATUS_CACHE_USED: {            int totalUsed = 0;            int i;            sqlite3BtreeEnterAll(db);            for(i=0; i<db->nDb; i++){                Btree *pBt = db->aDb[i].pBt;                if( pBt ){                    Pager *pPager = sqlite3BtreePager(pBt);                    totalUsed += sqlite3PagerMemUsed(pPager);                }            }            sqlite3BtreeLeaveAll(db);            *pCurrent = totalUsed;            *pHighwater = 0;            break;        }                        /*             ** *pCurrent gets an accurate estimate of the amount of memory used             ** to store the schema for all databases (main, temp, and any ATTACHed             ** databases.  *pHighwater is set to zero.             */        case SQLITE_DBSTATUS_SCHEMA_USED: {            int i;                      /* Used to iterate through schemas */            int nByte = 0;              /* Used to accumulate return value */                        sqlite3BtreeEnterAll(db);            db->pnBytesFreed = &nByte;            for(i=0; i<db->nDb; i++){                Schema *pSchema = db->aDb[i].pSchema;                if( ALWAYS(pSchema!=0) ){                    HashElem *p;                                        nByte += sqlite3GlobalConfig.m.xRoundup(sizeof(HashElem)) * (                                                                                 pSchema->tblHash.count                                                                                 + pSchema->trigHash.count                                                                                 + pSchema->idxHash.count                                                                                 + pSchema->fkeyHash.count                                                                                 );                    nByte += sqlite3MallocSize(pSchema->tblHash.ht);                    nByte += sqlite3MallocSize(pSchema->trigHash.ht);                    nByte += sqlite3MallocSize(pSchema->idxHash.ht);                    nByte += sqlite3MallocSize(pSchema->fkeyHash.ht);                                        for(p=sqliteHashFirst(&pSchema->trigHash); p; p=sqliteHashNext(p)){                        sqlite3DeleteTrigger(db, (Trigger*)sqliteHashData(p));                    }                    for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){                        sqlite3DeleteTable(db, (Table *)sqliteHashData(p));                    }                }            }            db->pnBytesFreed = 0;            sqlite3BtreeLeaveAll(db);                        *pHighwater = 0;            *pCurrent = nByte;//.........这里部分代码省略.........
开发者ID:pchernev,项目名称:Objective-C-iOS-Categories,代码行数:101,


示例9: sqlite3RunParser

//.........这里部分代码省略.........  void *pEngine;  int tokenType;  int lastTokenParsed = -1;  sqlite3 *db = pParse->db;  extern void *sqlite3ParserAlloc(void*(*)(int));  extern void sqlite3ParserFree(void*, void(*)(void*));  extern int sqlite3Parser(void*, int, Token, Parse*);  db->flags &= ~SQLITE_Interrupt;  pParse->rc = SQLITE_OK;  i = 0;  pEngine = sqlite3ParserAlloc((void*(*)(int))sqlite3MallocX);  if( pEngine==0 ){    sqlite3SetString(pzErrMsg, "out of memory", (char*)0);    return SQLITE_NOMEM;  }  assert( pParse->sLastToken.dyn==0 );  assert( pParse->pNewTable==0 );  assert( pParse->pNewTrigger==0 );  assert( pParse->nVar==0 );  assert( pParse->nVarExpr==0 );  assert( pParse->nVarExprAlloc==0 );  assert( pParse->apVarExpr==0 );  pParse->zTail = pParse->zSql = zSql;  while( sqlite3_malloc_failed==0 && zSql[i]!=0 ){    assert( i>=0 );    pParse->sLastToken.z = &zSql[i];    assert( pParse->sLastToken.dyn==0 );    pParse->sLastToken.n = getToken((unsigned char*)&zSql[i],&tokenType);    i += pParse->sLastToken.n;    switch( tokenType ){      case TK_SPACE:      case TK_COMMENT: {        if( (db->flags & SQLITE_Interrupt)!=0 ){          pParse->rc = SQLITE_INTERRUPT;          sqlite3SetString(pzErrMsg, "interrupt", (char*)0);          goto abort_parse;        }        break;      }      case TK_ILLEGAL: {        if( pzErrMsg ){          sqliteFree(*pzErrMsg);          *pzErrMsg = sqlite3MPrintf("unrecognized token: /"%T/"",                          &pParse->sLastToken);        }        nErr++;        goto abort_parse;      }      case TK_SEMI: {        pParse->zTail = &zSql[i];        /* Fall thru into the default case */      }      default: {        sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);        lastTokenParsed = tokenType;        if( pParse->rc!=SQLITE_OK ){          goto abort_parse;        }        break;      }    }  }abort_parse:  if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){    if( lastTokenParsed!=TK_SEMI ){      sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);      pParse->zTail = &zSql[i];    }    sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);  }  sqlite3ParserFree(pEngine, sqlite3FreeX);  if( sqlite3_malloc_failed ){    pParse->rc = SQLITE_NOMEM;  }  if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){    sqlite3SetString(&pParse->zErrMsg, sqlite3ErrStr(pParse->rc),                    (char*)0);  }  if( pParse->zErrMsg ){    if( pzErrMsg && *pzErrMsg==0 ){      *pzErrMsg = pParse->zErrMsg;    }else{      sqliteFree(pParse->zErrMsg);    }    pParse->zErrMsg = 0;    if( !nErr ) nErr++;  }  if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){    sqlite3VdbeDelete(pParse->pVdbe);    pParse->pVdbe = 0;  }  sqlite3DeleteTable(pParse->db, pParse->pNewTable);  sqlite3DeleteTrigger(pParse->pNewTrigger);  sqliteFree(pParse->apVarExpr);  if( nErr>0 && (pParse->rc==SQLITE_OK || pParse->rc==SQLITE_DONE) ){    pParse->rc = SQLITE_ERROR;  }  return nErr;}
开发者ID:DSD-TELCEL-ESCOM,项目名称:INE-Votation-Distributed-System,代码行数:101,


示例10: sqlite3RunParser

//.........这里部分代码省略.........  assert( pParse->pNewTrigger==0 );  assert( pParse->nVar==0 );  assert( pParse->nVarExpr==0 );  assert( pParse->nVarExprAlloc==0 );  assert( pParse->apVarExpr==0 );  pParse->zTail = pParse->zSql = zSql;  while( !db->mallocFailed && zSql[i]!=0 ){    assert( i>=0 );    pParse->sLastToken.z = (u8*)&zSql[i];    assert( pParse->sLastToken.dyn==0 );    pParse->sLastToken.n = getToken((unsigned char*)&zSql[i],&tokenType);    i += pParse->sLastToken.n;    if( SQLITE_MAX_SQL_LENGTH>0 && i>SQLITE_MAX_SQL_LENGTH ){      pParse->rc = SQLITE_TOOBIG;      break;    }    switch( tokenType ){      case TK_SPACE:      case TK_COMMENT: {        if( db->u1.isInterrupted ){          pParse->rc = SQLITE_INTERRUPT;          sqlite3SetString(pzErrMsg, "interrupt", (char*)0);          goto abort_parse;        }        break;      }      case TK_ILLEGAL: {        if( pzErrMsg ){          sqlite3_free(*pzErrMsg);          *pzErrMsg = sqlite3MPrintf(db, "unrecognized token: /"%T/"",                          &pParse->sLastToken);        }        nErr++;        goto abort_parse;      }      case TK_SEMI: {        pParse->zTail = &zSql[i];        /* Fall thru into the default case */      }      default: {        sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);        lastTokenParsed = tokenType;        if( pParse->rc!=SQLITE_OK ){          goto abort_parse;        }        break;      }    }  }abort_parse:  if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){    if( lastTokenParsed!=TK_SEMI ){      sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);      pParse->zTail = &zSql[i];    }    sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);  }  sqlite3ParserFree(pEngine, sqlite3_free);  if( db->mallocFailed ){    pParse->rc = SQLITE_NOMEM;  }  if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){    sqlite3SetString(&pParse->zErrMsg, sqlite3ErrStr(pParse->rc), (char*)0);  }  if( pParse->zErrMsg ){    if( pzErrMsg && *pzErrMsg==0 ){      *pzErrMsg = pParse->zErrMsg;    }else{      sqlite3_free(pParse->zErrMsg);    }    pParse->zErrMsg = 0;    nErr++;  }  if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){    sqlite3VdbeDelete(pParse->pVdbe);    pParse->pVdbe = 0;  }#ifndef SQLITE_OMIT_SHARED_CACHE  if( pParse->nested==0 ){    sqlite3_free(pParse->aTableLock);    pParse->aTableLock = 0;    pParse->nTableLock = 0;  }#endif  if( !IN_DECLARE_VTAB ){    /* If the pParse->declareVtab flag is set, do not delete any table     ** structure built up in pParse->pNewTable. The calling code (see vtab.c)    ** will take responsibility for freeing the Table structure.    */    sqlite3DeleteTable(pParse->pNewTable);  }  sqlite3DeleteTrigger(pParse->pNewTrigger);  sqlite3_free(pParse->apVarExpr);  if( nErr>0 && (pParse->rc==SQLITE_OK || pParse->rc==SQLITE_DONE) ){    pParse->rc = SQLITE_ERROR;  }  return nErr;}
开发者ID:riseven,项目名称:ri7engine,代码行数:101,


示例11: sqlite3FinishTrigger

/* ** This routine is called after all of the trigger actions have been parsed ** in order to complete the process of building the trigger. */SQLITE_PRIVATE void sqlite3FinishTrigger(                                         Parse *pParse,          /* Parser context */                                         TriggerStep *pStepList, /* The triggered program */                                         Token *pAll             /* Token that describes the complete CREATE TRIGGER */){    Trigger *pTrig = pParse->pNewTrigger;   /* Trigger being finished */    char *zName;                            /* Name of trigger */    sqlite3 *db = pParse->db;               /* The database */    DbFixer sFix;                           /* Fixer object */    int iDb;                                /* Database containing the trigger */    Token nameToken;                        /* Trigger name for error reporting */        pParse->pNewTrigger = 0;    if( NEVER(pParse->nErr) || !pTrig ) goto triggerfinish_cleanup;    zName = pTrig->zName;    iDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);    pTrig->step_list = pStepList;    while( pStepList ){        pStepList->pTrig = pTrig;        pStepList = pStepList->pNext;    }    nameToken.z = pTrig->zName;    nameToken.n = sqlite3Strlen30(nameToken.z);    sqlite3FixInit(&sFix, pParse, iDb, "trigger", &nameToken);    if( sqlite3FixTriggerStep(&sFix, pTrig->step_list)       || sqlite3FixExpr(&sFix, pTrig->pWhen)       ){        goto triggerfinish_cleanup;    }        /* if we are not initializing,     ** build the sqlite_master entry     */    if( !db->init.busy ){        Vdbe *v;        char *z;                /* Make an entry in the sqlite_master table */        v = sqlite3GetVdbe(pParse);        if( v==0 ) goto triggerfinish_cleanup;        sqlite3BeginWriteOperation(pParse, 0, iDb);        z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n);        sqlite3NestedParse(pParse,                           "INSERT INTO %Q.%s VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')",                           db->aDb[iDb].zName, SCHEMA_TABLE(iDb), zName,                           pTrig->table, z);        sqlite3DbFree(db, z);        sqlite3ChangeCookie(pParse, iDb);        sqlite3VdbeAddParseSchemaOp(v, iDb,                                    sqlite3MPrintf(db, "type='trigger' AND name='%q'", zName));    }        if( db->init.busy ){        Trigger *pLink = pTrig;        Hash *pHash = &db->aDb[iDb].pSchema->trigHash;        assert( sqlite3SchemaMutexHeld(db, iDb, 0) );        pTrig = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), pTrig);        if( pTrig ){            db->mallocFailed = 1;        }else if( pLink->pSchema==pLink->pTabSchema ){            Table *pTab;            int n = sqlite3Strlen30(pLink->table);            pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table, n);            assert( pTab!=0 );            pLink->pNext = pTab->pTrigger;            pTab->pTrigger = pLink;        }    }    triggerfinish_cleanup:    sqlite3DeleteTrigger(db, pTrig);    assert( !pParse->pNewTrigger );    sqlite3DeleteTriggerStep(db, pStepList);}
开发者ID:pchernev,项目名称:Objective-C-iOS-Categories,代码行数:78,


示例12: sqlite3BeginTrigger

//.........这里部分代码省略.........  if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", pName) &&       sqlite3FixSrcList(&sFix, pTableName) ){    goto trigger_cleanup;  }  pTab = sqlite3SrcListLookup(pParse, pTableName);  if( !pTab ){    /* The table does not exist. */    goto trigger_cleanup;  }  if( IsVirtual(pTab) ){    sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables");    goto trigger_cleanup;  }  /* Check that the trigger name is not reserved and that no trigger of the  ** specified name exists */  zName = sqlite3NameFromToken(db, pName);  if( !zName || SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){    goto trigger_cleanup;  }  if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash), zName,strlen(zName)) ){    if( !noErr ){      sqlite3ErrorMsg(pParse, "trigger %T already exists", pName);    }    goto trigger_cleanup;  }  /* Do not create a trigger on a system table */  if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){    sqlite3ErrorMsg(pParse, "cannot create trigger on system table");    pParse->nErr++;    goto trigger_cleanup;  }  /* INSTEAD of triggers are only for views and views only support INSTEAD  ** of triggers.  */  if( pTab->pSelect && tr_tm!=TK_INSTEAD ){    sqlite3ErrorMsg(pParse, "cannot create %s trigger on view: %S",         (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName, 0);    goto trigger_cleanup;  }  if( !pTab->pSelect && tr_tm==TK_INSTEAD ){    sqlite3ErrorMsg(pParse, "cannot create INSTEAD OF"        " trigger on table: %S", pTableName, 0);    goto trigger_cleanup;  }  iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema);#ifndef SQLITE_OMIT_AUTHORIZATION  {    int code = SQLITE_CREATE_TRIGGER;    const char *zDb = db->aDb[iTabDb].zName;    const char *zDbTrig = isTemp ? db->aDb[1].zName : zDb;    if( iTabDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER;    if( sqlite3AuthCheck(pParse, code, zName, pTab->zName, zDbTrig) ){      goto trigger_cleanup;    }    if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iTabDb),0,zDb)){      goto trigger_cleanup;    }  }#endif  /* INSTEAD OF triggers can only appear on views and BEFORE triggers  ** cannot appear on views.  So we might as well translate every  ** INSTEAD OF trigger into a BEFORE trigger.  It simplifies code  ** elsewhere.  */  if (tr_tm == TK_INSTEAD){    tr_tm = TK_BEFORE;  }  /* Build the Trigger object */  pTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger));  if( pTrigger==0 ) goto trigger_cleanup;  pTrigger->name = zName;  zName = 0;  pTrigger->table = sqlite3DbStrDup(db, pTableName->a[0].zName);  pTrigger->pSchema = db->aDb[iDb].pSchema;  pTrigger->pTabSchema = pTab->pSchema;  pTrigger->op = op;  pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER;  pTrigger->pWhen = sqlite3ExprDup(db, pWhen);  pTrigger->pColumns = sqlite3IdListDup(db, pColumns);  sqlite3TokenCopy(db, &pTrigger->nameToken,pName);  assert( pParse->pNewTrigger==0 );  pParse->pNewTrigger = pTrigger;trigger_cleanup:  sqlite3_free(zName);  sqlite3SrcListDelete(pTableName);  sqlite3IdListDelete(pColumns);  sqlite3ExprDelete(pWhen);  if( !pParse->pNewTrigger ){    sqlite3DeleteTrigger(pTrigger);  }else{    assert( pParse->pNewTrigger==pTrigger );  }}
开发者ID:DoktahWorm,项目名称:rhodes,代码行数:101,


示例13: sqlite3FinishTrigger

/*** This routine is called after all of the trigger actions have been parsed** in order to complete the process of building the trigger.*/void sqlite3FinishTrigger(  Parse *pParse,          /* Parser context */  TriggerStep *pStepList, /* The triggered program */  Token *pAll             /* Token that describes the complete CREATE TRIGGER */){  Trigger *pTrig = 0;     /* The trigger whose construction is finishing up */  sqlite3 *db = pParse->db;  /* The database */  DbFixer sFix;  int iDb;                   /* Database containing the trigger */  pTrig = pParse->pNewTrigger;  pParse->pNewTrigger = 0;  if( pParse->nErr || !pTrig ) goto triggerfinish_cleanup;  iDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);  pTrig->step_list = pStepList;  while( pStepList ){    pStepList->pTrig = pTrig;    pStepList = pStepList->pNext;  }  if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", &pTrig->nameToken)           && sqlite3FixTriggerStep(&sFix, pTrig->step_list) ){    goto triggerfinish_cleanup;  }  /* if we are not initializing, and this trigger is not on a TEMP table,   ** build the sqlite_master entry  */  if( !db->init.busy ){    static const VdbeOpList insertTrig[] = {      { OP_NewRowid,   0, 0,  0          },      { OP_String8,    0, 0,  "trigger"  },      { OP_String8,    0, 0,  0          },  /* 2: trigger name */      { OP_String8,    0, 0,  0          },  /* 3: table name */      { OP_Integer,    0, 0,  0          },      { OP_String8,    0, 0,  "CREATE TRIGGER "},      { OP_String8,    0, 0,  0          },  /* 6: SQL */      { OP_Concat,     0, 0,  0          },       { OP_MakeRecord, 5, 0,  "aaada"    },      { OP_Insert,     0, 0,  0          },    };    int addr;    Vdbe *v;    /* Make an entry in the sqlite_master table */    v = sqlite3GetVdbe(pParse);    if( v==0 ) goto triggerfinish_cleanup;    sqlite3BeginWriteOperation(pParse, 0, iDb);    sqlite3OpenMasterTable(pParse, iDb);    addr = sqlite3VdbeAddOpList(v, ArraySize(insertTrig), insertTrig);    sqlite3VdbeChangeP3(v, addr+2, pTrig->name, 0);     sqlite3VdbeChangeP3(v, addr+3, pTrig->table, 0);     sqlite3VdbeChangeP3(v, addr+6, (char*)pAll->z, pAll->n);    sqlite3ChangeCookie(db, v, iDb);    sqlite3VdbeAddOp(v, OP_Close, 0, 0);    sqlite3VdbeOp3(v, OP_ParseSchema, iDb, 0, sqlite3MPrintf(        db, "type='trigger' AND name='%q'", pTrig->name), P3_DYNAMIC    );  }  if( db->init.busy ){    int n;    Table *pTab;    Trigger *pDel;    pDel = (Trigger*)sqlite3HashInsert(&db->aDb[iDb].pSchema->trigHash,                      pTrig->name, strlen(pTrig->name), pTrig);    if( pDel ){      assert( pDel==pTrig );      db->mallocFailed = 1;      goto triggerfinish_cleanup;    }    n = strlen(pTrig->table) + 1;    pTab = (Table*)sqlite3HashFind(&pTrig->pTabSchema->tblHash, pTrig->table, n);    assert( pTab!=0 );    pTrig->pNext = pTab->pTrigger;    pTab->pTrigger = pTrig;    pTrig = 0;  }triggerfinish_cleanup:  sqlite3DeleteTrigger(pTrig);  assert( !pParse->pNewTrigger );  sqlite3DeleteTriggerStep(pStepList);}
开发者ID:DoktahWorm,项目名称:rhodes,代码行数:87,


示例14: sqlite3RunParser

//.........这里部分代码省略.........    if( i>mxSqlLen ){      pParse->rc = SQLITE_TOOBIG;      break;    }    switch( tokenType ){      case TK_SPACE: {        if( db->u1.isInterrupted ){          pParse->rc = SQLITE_INTERRUPT;          sqlite3SetString(pzErrMsg, db, "interrupt");          goto abort_parse;        }        break;      }      case TK_ILLEGAL: {        sqlite3DbFree(db, *pzErrMsg);        *pzErrMsg = sqlite3MPrintf(db, "unrecognized token: /"%T/"",                        &pParse->sLastToken);        nErr++;        goto abort_parse;      }      case TK_SEMI: {        pParse->zTail = &zSql[i];        /* Fall thru into the default case */      }      default: {        sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);        lastTokenParsed = tokenType;        if( pParse->rc!=SQLITE_OK ){          goto abort_parse;        }        break;      }    }  }abort_parse:  if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){    if( lastTokenParsed!=TK_SEMI ){      sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);      pParse->zTail = &zSql[i];    }    sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);  }#ifdef YYTRACKMAXSTACKDEPTH  sqlite3StatusSet(SQLITE_STATUS_PARSER_STACK,      sqlite3ParserStackPeak(pEngine)  );#endif /* YYDEBUG */  sqlite3ParserFree(pEngine, sqlite3_free);  db->lookaside.bEnabled = enableLookaside;  if( db->mallocFailed ){    pParse->rc = SQLITE_NOMEM;  }  if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){    sqlite3SetString(&pParse->zErrMsg, db, "%s", sqlite3ErrStr(pParse->rc));  }  if( pParse->zErrMsg ){    if( *pzErrMsg==0 ){      *pzErrMsg = pParse->zErrMsg;    }else{      sqlite3DbFree(db, pParse->zErrMsg);    }    pParse->zErrMsg = 0;    nErr++;  }  if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){    sqlite3VdbeDelete(pParse->pVdbe);    pParse->pVdbe = 0;  }#ifndef SQLITE_OMIT_SHARED_CACHE  if( pParse->nested==0 ){    sqlite3DbFree(db, pParse->aTableLock);    pParse->aTableLock = 0;    pParse->nTableLock = 0;  }#endif#ifndef SQLITE_OMIT_VIRTUALTABLE  sqlite3DbFree(db, pParse->apVtabLock);#endif  if( !IN_DECLARE_VTAB ){    /* If the pParse->declareVtab flag is set, do not delete any table     ** structure built up in pParse->pNewTable. The calling code (see vtab.c)    ** will take responsibility for freeing the Table structure.    */    sqlite3DeleteTable(pParse->pNewTable);  }  sqlite3DeleteTrigger(db, pParse->pNewTrigger);  sqlite3DbFree(db, pParse->apVarExpr);  sqlite3DbFree(db, pParse->aAlias);  while( pParse->pZombieTab ){    Table *p = pParse->pZombieTab;    pParse->pZombieTab = p->pNextZombie;    sqlite3DeleteTable(p);  }  if( nErr>0 && (pParse->rc==SQLITE_OK || pParse->rc==SQLITE_DONE) ){    pParse->rc = SQLITE_ERROR;  }  return nErr;}
开发者ID:scottmills,项目名称:sqlcipher,代码行数:101,


示例15: sqlite3DropTriggerPtr

/*** Drop a trigger given a pointer to that trigger.  If nested is false,** then also generate code to remove the trigger from the SQLITE_MASTER** table.*/void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger, int nested){  Table   *pTable;  Vdbe *v;  sqlite *db = pParse->db;  assert( pTrigger->iDb<db->nDb );  pTable = sqlite3FindTable(db,pTrigger->table,db->aDb[pTrigger->iTabDb].zName);  assert(pTable);  assert( pTable->iDb==pTrigger->iDb || pTrigger->iDb==1 );#ifndef SQLITE_OMIT_AUTHORIZATION  {    int code = SQLITE_DROP_TRIGGER;    const char *zDb = db->aDb[pTrigger->iDb].zName;    const char *zTab = SCHEMA_TABLE(pTrigger->iDb);    if( pTrigger->iDb==1 ) code = SQLITE_DROP_TEMP_TRIGGER;    if( sqlite3AuthCheck(pParse, code, pTrigger->name, pTable->zName, zDb) ||      sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){      return;    }  }#endif  /* Generate code to destroy the database record of the trigger.  */  if( pTable!=0 && (v = sqlite3GetVdbe(pParse))!=0 ){    int base;    static VdbeOpList dropTrigger[] = {      { OP_Rewind,     0, ADDR(9),  0},      { OP_String8,     0, 0,        0}, /* 1 */      { OP_Column,     0, 1,        0},      { OP_Ne,         0, ADDR(8),  0},      { OP_String8,     0, 0,        "trigger"},      { OP_Column,     0, 0,        0},      { OP_Ne,         0, ADDR(8),  0},      { OP_Delete,     0, 0,        0},      { OP_Next,       0, ADDR(1),  0}, /* 8 */    };    sqlite3BeginWriteOperation(pParse, 0, pTrigger->iDb);    sqlite3OpenMasterTable(v, pTrigger->iDb);    base = sqlite3VdbeAddOpList(v,  ArraySize(dropTrigger), dropTrigger);    sqlite3VdbeChangeP3(v, base+1, pTrigger->name, 0);    sqlite3ChangeCookie(db, v, pTrigger->iDb);    sqlite3VdbeAddOp(v, OP_Close, 0, 0);  }  /*  ** If this is not an "explain", then delete the trigger structure.  */  if( !pParse->explain ){    const char *zName = pTrigger->name;    int nName = strlen(zName);    if( pTable->pTrigger == pTrigger ){      pTable->pTrigger = pTrigger->pNext;    }else{      Trigger *cc = pTable->pTrigger;      while( cc ){         if( cc->pNext == pTrigger ){          cc->pNext = cc->pNext->pNext;          break;        }        cc = cc->pNext;      }      assert(cc);    }    sqlite3HashInsert(&(db->aDb[pTrigger->iDb].trigHash), zName, nName+1, 0);    sqlite3DeleteTrigger(pTrigger);  }}
开发者ID:open2cerp,项目名称:Open2C-ERP,代码行数:74,


示例16: sqlite3BeginTrigger

//.........这里部分代码省略.........             */            db->init.orphanTrigger = 1;        }        goto trigger_cleanup;    }    if( IsVirtual(pTab) ){        sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables");        goto trigger_cleanup;    }        /* Check that the trigger name is not reserved and that no trigger of the     ** specified name exists */    zName = sqlite3NameFromToken(db, pName);    if( !zName || SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){        goto trigger_cleanup;    }    assert( sqlite3SchemaMutexHeld(db, iDb, 0) );    if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),                        zName, sqlite3Strlen30(zName)) ){        if( !noErr ){            sqlite3ErrorMsg(pParse, "trigger %T already exists", pName);        }else{            assert( !db->init.busy );            sqlite3CodeVerifySchema(pParse, iDb);        }        goto trigger_cleanup;    }        /* Do not create a trigger on a system table */    if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){        sqlite3ErrorMsg(pParse, "cannot create trigger on system table");        pParse->nErr++;        goto trigger_cleanup;    }        /* INSTEAD of triggers are only for views and views only support INSTEAD     ** of triggers.     */    if( pTab->pSelect && tr_tm!=TK_INSTEAD ){        sqlite3ErrorMsg(pParse, "cannot create %s trigger on view: %S",                        (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName, 0);        goto trigger_cleanup;    }    if( !pTab->pSelect && tr_tm==TK_INSTEAD ){        sqlite3ErrorMsg(pParse, "cannot create INSTEAD OF"                        " trigger on table: %S", pTableName, 0);        goto trigger_cleanup;    }    iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema);    #ifndef SQLITE_OMIT_AUTHORIZATION    {        int code = SQLITE_CREATE_TRIGGER;        const char *zDb = db->aDb[iTabDb].zName;        const char *zDbTrig = isTemp ? db->aDb[1].zName : zDb;        if( iTabDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER;        if( sqlite3AuthCheck(pParse, code, zName, pTab->zName, zDbTrig) ){            goto trigger_cleanup;        }        if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iTabDb),0,zDb)){            goto trigger_cleanup;        }    }#endif        /* INSTEAD OF triggers can only appear on views and BEFORE triggers     ** cannot appear on views.  So we might as well translate every     ** INSTEAD OF trigger into a BEFORE trigger.  It simplifies code     ** elsewhere.     */    if (tr_tm == TK_INSTEAD){        tr_tm = TK_BEFORE;    }        /* Build the Trigger object */    pTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger));    if( pTrigger==0 ) goto trigger_cleanup;    pTrigger->zName = zName;    zName = 0;    pTrigger->table = sqlite3DbStrDup(db, pTableName->a[0].zName);    pTrigger->pSchema = db->aDb[iDb].pSchema;    pTrigger->pTabSchema = pTab->pSchema;    pTrigger->op = (u8)op;    pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER;    pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE);    pTrigger->pColumns = sqlite3IdListDup(db, pColumns);    assert( pParse->pNewTrigger==0 );    pParse->pNewTrigger = pTrigger;    trigger_cleanup:    sqlite3DbFree(db, zName);    sqlite3SrcListDelete(db, pTableName);    sqlite3IdListDelete(db, pColumns);    sqlite3ExprDelete(db, pWhen);    if( !pParse->pNewTrigger ){        sqlite3DeleteTrigger(db, pTrigger);    }else{        assert( pParse->pNewTrigger==pTrigger );    }}
开发者ID:pchernev,项目名称:Objective-C-iOS-Categories,代码行数:101,


示例17: sqlite3RunParser

//.........这里部分代码省略.........  }  assert( pzErrMsg!=0 );  if( pParse->zErrMsg ){    *pzErrMsg = pParse->zErrMsg;    sqlite3_log(pParse->rc, "%s in /"%s/"",                 *pzErrMsg, pParse->zTail);    pParse->zErrMsg = 0;    nErr++;  }  pParse->zTail = zSql;  if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){    sqlite3VdbeDelete(pParse->pVdbe);    pParse->pVdbe = 0;  }#ifndef SQLITE_OMIT_SHARED_CACHE  if( pParse->nested==0 ){    sqlite3DbFree(db, pParse->aTableLock);    pParse->aTableLock = 0;    pParse->nTableLock = 0;  }#endif#ifndef SQLITE_OMIT_VIRTUALTABLE  sqlite3_free(pParse->apVtabLock);#endif  if( !IN_SPECIAL_PARSE ){    /* If the pParse->declareVtab flag is set, do not delete any table     ** structure built up in pParse->pNewTable. The calling code (see vtab.c)    ** will take responsibility for freeing the Table structure.    */    sqlite3DeleteTable(db, pParse->pNewTable);  }  if( !IN_RENAME_OBJECT ){    sqlite3DeleteTrigger(db, pParse->pNewTrigger);  }  if( pParse->pWithToFree ) sqlite3WithDelete(db, pParse->pWithToFree);  sqlite3DbFree(db, pParse->pVList);  while( pParse->pAinc ){    AutoincInfo *p = pParse->pAinc;    pParse->pAinc = p->pNext;    sqlite3DbFreeNN(db, p);  }  while( pParse->pZombieTab ){    Table *p = pParse->pZombieTab;    pParse->pZombieTab = p->pNextZombie;    sqlite3DeleteTable(db, p);  }  assert( nErr==0 || pParse->rc!=SQLITE_OK );  return nErr;}#ifdef SQLITE_ENABLE_NORMALIZE/*** Insert a single space character into pStr if the current string** ends with an identifier*/static void addSpaceSeparator(sqlite3_str *pStr){  if( pStr->nChar && sqlite3IsIdChar(pStr->zText[pStr->nChar-1]) ){    sqlite3_str_append(pStr, " ", 1);  }}/*** Compute a normalization of the SQL given by zSql[0..nSql-1].  Return
开发者ID:SCALE-GmbH,项目名称:sqlcipher,代码行数:67,


示例18: sqlite3FinishTrigger

/*** This routine is called after all of the trigger actions have been parsed** in order to complete the process of building the trigger.*/void sqlite3FinishTrigger(  Parse *pParse,          /* Parser context */  TriggerStep *pStepList, /* The triggered program */  Token *pAll             /* Token that describes the complete CREATE TRIGGER */){  Trigger *pTrig = 0;     /* The trigger whose construction is finishing up */  sqlite3 *db = pParse->db;  /* The database */  DbFixer sFix;  int iDb;                   /* Database containing the trigger */  pTrig = pParse->pNewTrigger;  pParse->pNewTrigger = 0;  if( pParse->nErr || !pTrig ) goto triggerfinish_cleanup;  iDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);  pTrig->step_list = pStepList;  while( pStepList ){    pStepList->pTrig = pTrig;    pStepList = pStepList->pNext;  }  if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", &pTrig->nameToken)           && sqlite3FixTriggerStep(&sFix, pTrig->step_list) ){    goto triggerfinish_cleanup;  }  /* if we are not initializing, and this trigger is not on a TEMP table,   ** build the sqlite_master entry  */  if( !db->init.busy ){    Vdbe *v;    char *z;    /* Make an entry in the sqlite_master table */    v = sqlite3GetVdbe(pParse);    if( v==0 ) goto triggerfinish_cleanup;    sqlite3BeginWriteOperation(pParse, 0, iDb);    z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n);    sqlite3NestedParse(pParse,       "INSERT INTO %Q.%s VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')",       db->aDb[iDb].zName, SCHEMA_TABLE(iDb), pTrig->name,       pTrig->table, z);    sqlite3DbFree(db, z);    sqlite3ChangeCookie(pParse, iDb);    sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0, sqlite3MPrintf(        db, "type='trigger' AND name='%q'", pTrig->name), P4_DYNAMIC    );  }  if( db->init.busy ){    int n;    Table *pTab;    Trigger *pDel;    pDel = sqlite3HashInsert(&db->aDb[iDb].pSchema->trigHash,                      pTrig->name, sqlite3Strlen30(pTrig->name), pTrig);    if( pDel ){      assert( pDel==pTrig );      db->mallocFailed = 1;      goto triggerfinish_cleanup;    }    n = sqlite3Strlen30(pTrig->table) + 1;    pTab = sqlite3HashFind(&pTrig->pTabSchema->tblHash, pTrig->table, n);    assert( pTab!=0 );    pTrig->pNext = pTab->pTrigger;    pTab->pTrigger = pTrig;    pTrig = 0;  }triggerfinish_cleanup:  sqlite3DeleteTrigger(db, pTrig);  assert( !pParse->pNewTrigger );  sqlite3DeleteTriggerStep(db, pStepList);}
开发者ID:erik-knudsen,项目名称:eCos-enhancements,代码行数:75,



注:本文中的sqlite3DeleteTrigger函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ sqlite3ExprDelete函数代码示例
C++ sqlite3DbStrDup函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。