~ubuntu-branches/ubuntu/hardy/sqlite3/hardy

« back to all changes in this revision

Viewing changes to src/trigger.c

  • Committer: Bazaar Package Importer
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2006-10-12 21:55:37 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20061012215537-mgvrxoq8ee4nqxzh
Tags: 3.3.8-1
* New upstream version.
* Create lang_* files for documentation (closes: #310603).
* Enable column metadata functions (closes: #375352).

Show diffs side-by-side

added added

removed removed

Lines of Context:
49
49
  SrcList *pTableName,/* The name of the table/view the trigger applies to */
50
50
  int foreach,        /* One of TK_ROW or TK_STATEMENT */
51
51
  Expr *pWhen,        /* WHEN clause */
52
 
  int isTemp          /* True if the TEMPORARY keyword is present */
 
52
  int isTemp,         /* True if the TEMPORARY keyword is present */
 
53
  int noErr           /* Suppress errors if the trigger already exists */
53
54
){
54
55
  Trigger *pTrigger = 0;
55
56
  Table *pTab;
103
104
    /* The table does not exist. */
104
105
    goto trigger_cleanup;
105
106
  }
 
107
  if( IsVirtual(pTab) ){
 
108
    sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables");
 
109
    goto trigger_cleanup;
 
110
  }
106
111
 
107
112
  /* Check that the trigger name is not reserved and that no trigger of the
108
113
  ** specified name exists */
111
116
    goto trigger_cleanup;
112
117
  }
113
118
  if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash), zName,strlen(zName)) ){
114
 
    sqlite3ErrorMsg(pParse, "trigger %T already exists", pName);
 
119
    if( !noErr ){
 
120
      sqlite3ErrorMsg(pParse, "trigger %T already exists", pName);
 
121
    }
115
122
    goto trigger_cleanup;
116
123
  }
117
124
 
435
442
** same job as this routine except it takes a pointer to the trigger
436
443
** instead of the trigger name.
437
444
**/
438
 
void sqlite3DropTrigger(Parse *pParse, SrcList *pName){
 
445
void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr){
439
446
  Trigger *pTrigger = 0;
440
447
  int i;
441
448
  const char *zDb;
459
466
    if( pTrigger ) break;
460
467
  }
461
468
  if( !pTrigger ){
462
 
    sqlite3ErrorMsg(pParse, "no such trigger: %S", pName, 0);
 
469
    if( !noErr ){
 
470
      sqlite3ErrorMsg(pParse, "no such trigger: %S", pName, 0);
 
471
    }
463
472
    goto drop_trigger_cleanup;
464
473
  }
465
474
  sqlite3DropTriggerPtr(pParse, pTrigger);
594
603
  int op,                 /* one of TK_DELETE, TK_INSERT, TK_UPDATE */
595
604
  ExprList *pChanges      /* Columns that change in an UPDATE statement */
596
605
){
597
 
  Trigger *pTrigger = pTab->pTrigger;
 
606
  Trigger *pTrigger;
598
607
  int mask = 0;
599
608
 
 
609
  pTrigger = IsVirtual(pTab) ? 0 : pTab->pTrigger;
600
610
  while( pTrigger ){
601
611
    if( pTrigger->op==op && checkColumnOverLap(pTrigger->pColumns, pChanges) ){
602
612
      mask |= pTrigger->tr_tm;