macbre / sql-metadata

Uses tokenized query returned by python-sqlparse and generates query metadata

Home Page:https://pypi.python.org/pypi/sql-metadata

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Some complex sql is not parsed correctly.

liudonghua123 opened this issue · comments

If I want to parse the following sql, the columns, columns_dict and so on are not correct.

CREATE TABLE `jeecg_order_main`  (
  `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键',
  `order_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '订单号',
  `ctype` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '订单类型',
  `order_date` datetime NULL DEFAULT NULL COMMENT '订单日期',
  `order_money` double(10, 3) NULL DEFAULT NULL COMMENT '订单金额',
  `content` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '订单备注',
  `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
  `bpm_status` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '流程状态',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
logs
>>> sql
"\nCREATE TABLE `jeecg_order_main`  (\n  `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT ' 主键',\n  `order_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '订单号',\n  `ctype` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '订单类型',\n  `order_date` datetime NULL DEFAULT NULL COMMENT '订单日期',\n  `order_money` double(10, 3) NULL DEFAULT NULL COMMENT '订单金额',\n  `content` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '订单备注',\n  `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',\n  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',\n  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',\n  `bpm_status` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '流程状态',\n  PRIMARY KEY (`id`) USING BTREE\n) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;\n"

>>> parser=Parser(sql)
>>> parser. Tokens
......

>>> parser. Columns
['id', 'utf8', 'utf8_general_ci', 'order_code', 'ctype', 'order_date', 'datetime', 'order_money', 'content', 'create_by', 'create_time', 'update_by', 'update_time', 'bpm_status', 'BTREE']

>>> parser.columns_dict
{'update': ['utf8', 'utf8_general_ci', 'order_code', 'ctype', 'order_date', 'datetime', 'order_money', 'content', 'create_by', 'create_time', 'update_by', 'update_time', 'bpm_status', 'id'], 'join': ['BTREE']}

>>>