⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqliteint.h

📁 sqlite-3.4.1,嵌入式数据库.是一个功能强大的开源数据库,给学习和研发以及小型公司的发展带来了全所未有的好处.
💻 H
📖 第 1 页 / 共 5 页
字号:
struct Module {  const sqlite3_module *pModule;       /* Callback pointers */  const char *zName;                   /* Name passed to create_module() */  void *pAux;                          /* pAux passed to create_module() */  void (*xDestroy)(void *);            /* Module destructor function */};/*** Possible values for FuncDef.flags*/#define SQLITE_FUNC_LIKE   0x01  /* Candidate for the LIKE optimization */#define SQLITE_FUNC_CASE   0x02  /* Case-sensitive LIKE-type function */#define SQLITE_FUNC_EPHEM  0x04  /* Ephermeral.  Delete with VDBE *//*** information about each column of an SQL table is held in an instance** of this structure.*/struct Column {  char *zName;     /* Name of this column */  Expr *pDflt;     /* Default value of this column */  char *zType;     /* Data type for this column */  char *zColl;     /* Collating sequence.  If NULL, use the default */  u8 notNull;      /* True if there is a NOT NULL constraint */  u8 isPrimKey;    /* True if this column is part of the PRIMARY KEY */  char affinity;   /* One of the SQLITE_AFF_... values */#ifndef SQLITE_OMIT_VIRTUALTABLE  u8 isHidden;     /* True if this column is 'hidden' */#endif};/*** A "Collating Sequence" is defined by an instance of the following** structure. Conceptually, a collating sequence consists of a name and** a comparison routine that defines the order of that sequence.**** There may two seperate implementations of the collation function, one** that processes text in UTF-8 encoding (CollSeq.xCmp) and another that** processes text encoded in UTF-16 (CollSeq.xCmp16), using the machine** native byte order. When a collation sequence is invoked, SQLite selects** the version that will require the least expensive encoding** translations, if any.**** The CollSeq.pUser member variable is an extra parameter that passed in** as the first argument to the UTF-8 comparison function, xCmp.** CollSeq.pUser16 is the equivalent for the UTF-16 comparison function,** xCmp16.**** If both CollSeq.xCmp and CollSeq.xCmp16 are NULL, it means that the** collating sequence is undefined.  Indices built on an undefined** collating sequence may not be read or written.*/struct CollSeq {  char *zName;          /* Name of the collating sequence, UTF-8 encoded */  u8 enc;               /* Text encoding handled by xCmp() */  u8 type;              /* One of the SQLITE_COLL_... values below */  void *pUser;          /* First argument to xCmp() */  int (*xCmp)(void*,int, const void*, int, const void*);  void (*xDel)(void*);  /* Destructor for pUser */};/*** Allowed values of CollSeq flags:*/#define SQLITE_COLL_BINARY  1  /* The default memcmp() collating sequence */#define SQLITE_COLL_NOCASE  2  /* The built-in NOCASE collating sequence */#define SQLITE_COLL_REVERSE 3  /* The built-in REVERSE collating sequence */#define SQLITE_COLL_USER    0  /* Any other user-defined collating sequence *//*** A sort order can be either ASC or DESC.*/#define SQLITE_SO_ASC       0  /* Sort in ascending order */#define SQLITE_SO_DESC      1  /* Sort in ascending order *//*** Column affinity types.**** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and** 't' for SQLITE_AFF_TEXT.  But we can save a little space and improve** the speed a little by number the values consecutively.  **** But rather than start with 0 or 1, we begin with 'a'.  That way,** when multiple affinity types are concatenated into a string and** used as the P3 operand, they will be more readable.**** Note also that the numeric types are grouped together so that testing** for a numeric type is a single comparison.*/#define SQLITE_AFF_TEXT     'a'#define SQLITE_AFF_NONE     'b'#define SQLITE_AFF_NUMERIC  'c'#define SQLITE_AFF_INTEGER  'd'#define SQLITE_AFF_REAL     'e'#define sqlite3IsNumericAffinity(X)  ((X)>=SQLITE_AFF_NUMERIC)/*** Each SQL table is represented in memory by an instance of the** following structure.**** Table.zName is the name of the table.  The case of the original** CREATE TABLE statement is stored, but case is not significant for** comparisons.**** Table.nCol is the number of columns in this table.  Table.aCol is a** pointer to an array of Column structures, one for each column.**** If the table has an INTEGER PRIMARY KEY, then Table.iPKey is the index of** the column that is that key.   Otherwise Table.iPKey is negative.  Note** that the datatype of the PRIMARY KEY must be INTEGER for this field to** be set.  An INTEGER PRIMARY KEY is used as the rowid for each row of** the table.  If a table has no INTEGER PRIMARY KEY, then a random rowid** is generated for each row of the table.  Table.hasPrimKey is true if** the table has any PRIMARY KEY, INTEGER or otherwise.**** Table.tnum is the page number for the root BTree page of the table in the** database file.  If Table.iDb is the index of the database table backend** in sqlite.aDb[].  0 is for the main database and 1 is for the file that** holds temporary tables and indices.  If Table.isEphem** is true, then the table is stored in a file that is automatically deleted** when the VDBE cursor to the table is closed.  In this case Table.tnum ** refers VDBE cursor number that holds the table open, not to the root** page number.  Transient tables are used to hold the results of a** sub-query that appears instead of a real table name in the FROM clause ** of a SELECT statement.*/struct Table {  char *zName;     /* Name of the table */  int nCol;        /* Number of columns in this table */  Column *aCol;    /* Information about each column */  int iPKey;       /* If not less then 0, use aCol[iPKey] as the primary key */  Index *pIndex;   /* List of SQL indexes on this table. */  int tnum;        /* Root BTree node for this table (see note above) */  Select *pSelect; /* NULL for tables.  Points to definition if a view. */  int nRef;          /* Number of pointers to this Table */  Trigger *pTrigger; /* List of SQL triggers on this table */  FKey *pFKey;       /* Linked list of all foreign keys in this table */  char *zColAff;     /* String defining the affinity of each column */#ifndef SQLITE_OMIT_CHECK  Expr *pCheck;      /* The AND of all CHECK constraints */#endif#ifndef SQLITE_OMIT_ALTERTABLE  int addColOffset;  /* Offset in CREATE TABLE statement to add a new column */#endif  u8 readOnly;     /* True if this table should not be written by the user */  u8 isEphem;      /* True if created using OP_OpenEphermeral */  u8 hasPrimKey;   /* True if there exists a primary key */  u8 keyConf;      /* What to do in case of uniqueness conflict on iPKey */  u8 autoInc;      /* True if the integer primary key is autoincrement */#ifndef SQLITE_OMIT_VIRTUALTABLE  u8 isVirtual;             /* True if this is a virtual table */  u8 isCommit;              /* True once the CREATE TABLE has been committed */  Module *pMod;             /* Pointer to the implementation of the module */  sqlite3_vtab *pVtab;      /* Pointer to the module instance */  int nModuleArg;           /* Number of arguments to the module */  char **azModuleArg;       /* Text of all module args. [0] is module name */#endif  Schema *pSchema;};/*** Test to see whether or not a table is a virtual table.  This is** done as a macro so that it will be optimized out when virtual** table support is omitted from the build.*/#ifndef SQLITE_OMIT_VIRTUALTABLE#  define IsVirtual(X)      ((X)->isVirtual)#  define IsHiddenColumn(X) ((X)->isHidden)#else#  define IsVirtual(X)      0#  define IsHiddenColumn(X) 0#endif/*** Each foreign key constraint is an instance of the following structure.**** A foreign key is associated with two tables.  The "from" table is** the table that contains the REFERENCES clause that creates the foreign** key.  The "to" table is the table that is named in the REFERENCES clause.** Consider this example:****     CREATE TABLE ex1(**       a INTEGER PRIMARY KEY,**       b INTEGER CONSTRAINT fk1 REFERENCES ex2(x)**     );**** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2".**** Each REFERENCES clause generates an instance of the following structure** which is attached to the from-table.  The to-table need not exist when** the from-table is created.  The existance of the to-table is not checked** until an attempt is made to insert data into the from-table.**** The sqlite.aFKey hash table stores pointers to this structure** given the name of a to-table.  For each to-table, all foreign keys** associated with that table are on a linked list using the FKey.pNextTo** field.*/struct FKey {  Table *pFrom;     /* The table that constains the REFERENCES clause */  FKey *pNextFrom;  /* Next foreign key in pFrom */  char *zTo;        /* Name of table that the key points to */  FKey *pNextTo;    /* Next foreign key that points to zTo */  int nCol;         /* Number of columns in this key */  struct sColMap {  /* Mapping of columns in pFrom to columns in zTo */    int iFrom;         /* Index of column in pFrom */    char *zCol;        /* Name of column in zTo.  If 0 use PRIMARY KEY */  } *aCol;          /* One entry for each of nCol column s */  u8 isDeferred;    /* True if constraint checking is deferred till COMMIT */  u8 updateConf;    /* How to resolve conflicts that occur on UPDATE */  u8 deleteConf;    /* How to resolve conflicts that occur on DELETE */  u8 insertConf;    /* How to resolve conflicts that occur on INSERT */};/*** SQLite supports many different ways to resolve a contraint** error.  ROLLBACK processing means that a constraint violation** causes the operation in process to fail and for the current transaction** to be rolled back.  ABORT processing means the operation in process** fails and any prior changes from that one operation are backed out,** but the transaction is not rolled back.  FAIL processing means that** the operation in progress stops and returns an error code.  But prior** changes due to the same operation are not backed out and no rollback** occurs.  IGNORE means that the particular row that caused the constraint** error is not inserted or updated.  Processing continues and no error** is returned.  REPLACE means that preexisting database rows that caused** a UNIQUE constraint violation are removed so that the new insert or** update can proceed.  Processing continues and no error is reported.**** RESTRICT, SETNULL, and CASCADE actions apply only to foreign keys.** RESTRICT is the same as ABORT for IMMEDIATE foreign keys and the** same as ROLLBACK for DEFERRED keys.  SETNULL means that the foreign** key is set to NULL.  CASCADE means that a DELETE or UPDATE of the** referenced table row is propagated into the row that holds the** foreign key.** ** The following symbolic values are used to record which type** of action to take.*/#define OE_None     0   /* There is no constraint to check */#define OE_Rollback 1   /* Fail the operation and rollback the transaction */#define OE_Abort    2   /* Back out changes but do no rollback transaction */#define OE_Fail     3   /* Stop the operation but leave all prior changes */#define OE_Ignore   4   /* Ignore the error. Do not do the INSERT or UPDATE */#define OE_Replace  5   /* Delete existing record, then do INSERT or UPDATE */#define OE_Restrict 6   /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */#define OE_SetNull  7   /* Set the foreign key value to NULL */#define OE_SetDflt  8   /* Set the foreign key value to its default */#define OE_Cascade  9   /* Cascade the changes */#define OE_Default  99  /* Do whatever the default action is *//*** An instance of the following structure is passed as the first** argument to sqlite3VdbeKeyCompare and is used to control the ** comparison of the two index keys.**** If the KeyInfo.incrKey value is true and the comparison would** otherwise be equal, then return a result as if the second key** were larger.*/struct KeyInfo {  u8 enc;             /* Text encoding - one of the TEXT_Utf* values */  u8 incrKey;         /* Increase 2nd key by epsilon before comparison */  int nField;         /* Number of entries in aColl[] */  u8 *aSortOrder;     /* If defined an aSortOrder[i] is true, sort DESC */  CollSeq *aColl[1];  /* Collating sequence for each term of the key */};/*** Each SQL index is represented in memory by an** instance of the following structure.**** The columns of the table that are to be indexed are described** by the aiColumn[] field of this structure.  For example, suppose** we have the following table and index:****     CREATE TABLE Ex1(c1 int, c2 int, c3 text);**     CREATE INDEX Ex2 ON Ex1(c3,c1);**** In the Table structure describing Ex1, nCol==3 because there are** three columns in the table.  In the Index structure describing** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed.** The value of aiColumn is {2, 0}.  aiColumn[0]==2 because the ** first column to be indexed (c3) has an index of 2 in Ex1.aCol[].** The second column to be indexed (c1) has an index of 0 in** Ex1.aCol[], hence Ex2.aiColumn[1]==0.**

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -