1.2. 解析树的 ITEM 对象
在 MySQL 中, 有以下 ITEM 大类型:
- FIELD_ITEM, FUNC_ITEM,
- SUM_FUNC_ITEM,
- STRING_ITEM,
- INT_ITEM,
- REAL_ITEM,
- NULL_ITEM,
- VARBIN_ITEM,
- COPY_STR_ITEM,
- FIELD_AVG_ITEM,
- DEFAULT_VALUE_ITEM,
- PROC_ITEM,COND_ITEM,
- REF_ITEM,
- FIELD_STD_ITEM,
- FIELD_VARIANCE_ITEM,
- INSERT_VALUE_ITEM,
- SUBSELECT_ITEM,
- ROW_ITEM,
- CACHE_ITEM,
- TYPE_HOLDER,
- PARAM_ITEM
其中许多 ITEM 还有小类, 如 Item_func 有如下小类型:
- UNKNOWN_FUNC,
- EQ_FUNC,
- EQUAL_FUNC,
- NE_FUNC,
- LT_FUNC,
- LE_FUNC,
- GE_FUNC,
- GT_FUNC,FT_FUNC,
- LIKE_FUNC,
- NOTLIKE_FUNC,
- ISNULL_FUNC,
- ISNOTNULL_FUNC,
- COND_AND_FUNC,
- COND_OR_FUNC,
- COND_XOR_FUNC,
- BETWEEN, IN_FUNC,
- INTERVAL_FUNC,
- ISNOTNULLTEST_FUNC,
- SP_EQUALS_FUNC,
- SP_DISJOINT_FUNC,
- SP_INTERSECTS_FUNC,
- SP_TOUCHES_FUNC,
- SP_CROSSES_FUNC,
- SP_WITHIN_FUNC,
- SP_CONTAINS_FUNC,
- SP_OVERLAPS_FUNC,
- SP_STARTPOINT,
- SP_ENDPOINT,
- SP_EXTERIORRING,
- SP_POINTN,
- SP_GEOMETRYN,
- SP_INTERIORRINGN,
- NOT_FUNC,
- NOT_ALL_FUNC,
- NOW_FUNC,
- VAR_VALUE_FUNC
1.3. ITEM 语法树
1.4. FIELD 类型
- enum enum_field_types {
- MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
- MYSQL_TYPE_SHORT,MYSQL_TYPE_LONG,
- MYSQL_TYPE_FLOAT,MYSQL_TYPE_DOUBLE,
- MYSQL_TYPE_NULL,MYSQL_TYPE_TIMESTAMP,
- MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,
- MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,
- MYSQL_TYPE_DATETIME,MYSQL_TYPE_YEAR,
- MYSQL_TYPE_NEWDATE,
- MYSQL_TYPE_ENUM=247,
- MYSQL_TYPE_SET=248,
- MYSQL_TYPE_TINY_BLOB=249,
- MYSQL_TYPE_MEDIUM_BLOB=250,
- MYSQL_TYPE_LONG_BLOB=251,
- MYSQL_TYPE_BLOB=252,
- MYSQL_TYPE_VAR_STRING=253,
- MYSQL_TYPE_STRING=254,
- MYSQL_TYPE_GEOMETRY=255
- };
1.5. FIELD 和 ITEM 的关系
通过 Item 类中的 tmp_table_field_from_field_type 函数将一个 Item 类转化为一个 Filed 类返回, 例如
- Item_int ->Field_longlong
- Item_real->Field_double
- Item_string->Field_string
1.6. Bison 语法中的 WHERE
来源: http://blog.51cto.com/wangwei007/2300959