mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-05 15:55:57 +03:00
Be more aggressive about reusing subqueries that appear on the RHS of IN
operators that have been replicated due to the predicate push-down optimization. FossilOrigin-Name: 2accf32b6e45a396503c29eecc14a103bcc7b4c313cde921b26b489704060177
This commit is contained in:
15
src/vdbe.h
15
src/vdbe.h
@@ -32,6 +32,19 @@ typedef struct Vdbe Vdbe;
|
||||
*/
|
||||
typedef struct sqlite3_value Mem;
|
||||
typedef struct SubProgram SubProgram;
|
||||
typedef struct SubrtnSig SubrtnSig;
|
||||
|
||||
/*
|
||||
** A signature for a reusable subroutine that materializes the RHS of
|
||||
** an IN operator.
|
||||
*/
|
||||
struct SubrtnSig {
|
||||
int selId; /* SELECT-id for the SELECT statement on the RHS */
|
||||
char *zAff; /* Affinity of the overall IN expression */
|
||||
int iTable; /* Ephemeral table generated by the subroutine */
|
||||
int iAddr; /* Subroutine entry address */
|
||||
int regReturn; /* Register used to hold return address */
|
||||
};
|
||||
|
||||
/*
|
||||
** A single instruction of the virtual machine has an opcode
|
||||
@@ -60,6 +73,7 @@ struct VdbeOp {
|
||||
u32 *ai; /* Used when p4type is P4_INTARRAY */
|
||||
SubProgram *pProgram; /* Used when p4type is P4_SUBPROGRAM */
|
||||
Table *pTab; /* Used when p4type is P4_TABLE */
|
||||
SubrtnSig *pSubrtnSig; /* Used when p4type is P4_SUBRTNSIG */
|
||||
#ifdef SQLITE_ENABLE_CURSOR_HINTS
|
||||
Expr *pExpr; /* Used when p4type is P4_EXPR */
|
||||
#endif
|
||||
@@ -127,6 +141,7 @@ typedef struct VdbeOpList VdbeOpList;
|
||||
#define P4_INTARRAY (-14) /* P4 is a vector of 32-bit integers */
|
||||
#define P4_FUNCCTX (-15) /* P4 is a pointer to an sqlite3_context object */
|
||||
#define P4_TABLEREF (-16) /* Like P4_TABLE, but reference counted */
|
||||
#define P4_SUBRTNSIG (-17) /* P4 is a SubrtnSig pointer */
|
||||
|
||||
/* Error message codes for OP_Halt */
|
||||
#define P5_ConstraintNotNull 1
|
||||
|
Reference in New Issue
Block a user