美文网首页
SQLRewriteEngine的rewrite过程

SQLRewriteEngine的rewrite过程

作者: Britney_z | 来源:发表于2021-11-13 11:53 被阅读0次

我们看看SQLRewriteEngine 的rewrite方法,我们执行一条插入语句, INSERT INTO t_order (user_id, status,shop_id) VALUES (?, ?,?);    这里有3个sqlToken,TableToken、ItemsToken、InsertValuesToken

SQLBuilder结构

1、我们首先看看TableToken,看看getTableName方法,移除表名中的[] 和 \ 字符

我们看下执行完appendTablePlaceholder方法,处理完后,当前 currentSegment是  (user_id, status,shop_id

2、我们看看ItemsToken是用来补列

    AVG查询列:SELECT AVG(price) FROM t_order 的 AVG(price)

    ORDER BY 字段不在查询列:SELECT order_id FROM t_order ORDER BY create_time 的 create_time

    GROUP BY 字段不在查询列:SELECT COUNT(order_id) FROM t_order GROUP BY user_id 的 user_id

    自增主键未在插入列中:INSERT INTO t_order(xx) VALUES ... 中没有自增列 order_id

我们主要看看insert怎么补列的?我们itemToken的item是order_id,所以补完后 (user_id, status,shop_id, order_id

3、InsertValuesToken 

对于插入补VALUES  , (user_id, status,shop_id, order_id) VALUES  ,设置insertShardingConditions 表达式(?,?,?,?)

我们看下rewriteEngine 的generateSQL方法的toSQL方法,遍历所有segments

首先看下appendTablePlaceholder方法,将逻辑表明换成实际表名

我们看下appendInsertValuesPlaceholder方法,拼接(?,?,?,?),INSERT INTO t_order_1 (user_id, status,shop_id, order_id) VALUES (?, ?,?, ?)

相关文章

网友评论

      本文标题:SQLRewriteEngine的rewrite过程

      本文链接:https://www.haomeiwen.com/subject/ekcgzltx.html