[MDEV-4680] PARSER - new sql function Created: 2013-06-19  Updated: 2022-02-21

Status: Open
Project: MariaDB Server
Component/s: None
Fix Version/s: None

Type: Task Priority: Minor
Reporter: roberto spadim Assignee: Unassigned
Resolution: Unresolved Votes: 1
Labels: None

Issue Links:
Relates
relates to MDEV-5561 Query Rewrite Plugin API Stalled
relates to MDEV-26634 Feature request: add STATEMENT_DIGEST... Closed
relates to MDEV-6882 TOKENIZE query Open
relates to MDEV-8943 Syntax check for SQL files or SQL que... Open

 Description   

Implement some new functions (maybe UDF),

1)return a JSON object with token tree of SQL parser, example

SELECT SQL_TOKEN_TREE(
"SELECT * FROM (SELECT 1 AS a) AS b WHERE a=@var"
)

Result

{Query:[select, *, from, [select, var<1>, as, const<a>], as, const<b>, where, var<2>, =, var<3>], vars:{1:'1', 2:'a',3:'@var','@var':'qwert'}}

Or something more intelligent since i don't know how mysql parser works

2)SQL_TOKEN_SQL(sql tree)
Result a string removing consts with a willchar (like prepared statments)

SELECT * FROM TABLE WHERE A=1234

should return

SELECT * FROM TABLE WHERE A=?

this is something like percona tools, but it run inside server with server parse and not a third part parser:

$pt-fingerprint --query "/* -- S++ SU ABORTABLE -- spd_user: rspadim */SELECT SQL_SMALL_RESULT SQL_CACHE DISTINCT centro_atividade FROM est_dia WHERE unidade_id=1001 AND item_id=67 AND item_id_red=573"
 
SELECT DISTINCT centro_atividade FROM est_dia WHERE unidade_id=? AND item_id=? AND item_id_red=?

3)Add a SQL_PARSER_OPTIMIZE(QUERY)
it parse the query and execute optimizations (opt_range and others)
example

SELECT * FROM TABLE WHERE A=1234 AND 0=0

rewrite to

SELECT * FROM TABLE WHERE A=1234


Generated at Thu Feb 08 06:58:19 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.