SQLRewriteEngine的rewrite过程

我们看看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 (?, ?,?, ?)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容