SQL中间件源码分析:SQL 改写(2)
1 // SQLRewriteEngine.java
2 /**
3 * 拼接 TableToken
4 *
5 * @param sqlBuilder SQL构建器
6 * @param tableToken tableToken
7 * @param count tableToken 在 sqlTokens 的顺序
8 * @param sqlTokens sqlTokens
9 */
10 private void appendTableToken(final SQLBuilder sqlBuilder, final TableToken tableToken, final int count, final List sqlTokens) {
11 // 拼接 TableToken
12 String tableName = sqlStatement.getTables().getTableNames().contains(tableToken.getTableName()) ? tableToken.getTableName() : tableToken.getOriginalLiterals();
13 sqlBuilder.appendTable(tableName);
14 // 拼接 SQLToken 后面的字符串
15 int beginPosition = tableToken.getBeginPosition() + tableToken.getOriginalLiterals().length();
16 int endPosition = sqlTokens.size() – 1 == count ? originalSQL.length() : sqlTokens.get(count + 1).getBeginPosition();
17 sqlBuilder.appendLiterals(originalSQL.substring(beginPosition, endPosition));
18 }
1 // TableToken.java
2 /**
3 * 获取表名称.
4 */
5 public String getTableName() {
6 return SQLUtil.getExactlyValue(originalLiterals);
7 }
8 // SQLUtil.java
9 public static String getExactlyValue(final String value) {
10 return null == value ? null : CharMatcher.anyOf(“[]`'\””).removeFrom(value);
11 }
1 // SQLRewriteEngine.java
2 /**
3 * 拼接 TableToken
4 *
5 * @param sqlBuilder SQL构建器
6 * @param itemsToken itemsToken
7 * @param count itemsToken 在 sqlTokens 的顺序
8 * @param sqlTokens sqlTokens
9 */
10 private void appendItemsToken(final SQLBuilder sqlBuilder, final ItemsToken itemsToken, final int count, final List sqlTokens) {
11 // 拼接 ItemsToken
12 for (String item : itemsToken.getItems()) {
13 sqlBuilder.appendLiterals(“, “);
14 sqlBuilder.appendLiterals(item);
15 }
16 // SQLToken 后面的字符串
17 int beginPosition = itemsToken.getBeginPosition();
18 int endPosition = sqlTokens.size() – 1 == count ? originalSQL.length() : sqlTokens.get(count + 1).getBeginPosition();
19 sqlBuilder.appendLiterals(originalSQL.substring(beginPosition, endPosition));
20 }
1 // SQLRewriteEngine.java
2 /**
3 * 拼接 OffsetToken
4 *
5 * @param sqlBuilder SQL构建器
6 * @param offsetToken offsetToken
7 * @param count offsetToken 在 sqlTokens 的顺序
8 * @param sqlTokens sqlTokens
9 * @param isRewrite 能否重写。当路由结果为单分片时无需重写
10 */
11 private void appendLimitOffsetToken(final SQLBuilder sqlBuilder, final OffsetToken offsetToken, final int count, final List sqlTokens, final boolean isRewrite) {
12 // 拼接 OffsetToken
13 sqlBuilder.appendLiterals(isRewrite ? “0” : String.valueOf(offsetToken.getOffset()));
14 // SQLToken 后面的字符串
15 int beginPosition = offsetToken.getBeginPosition() + String.valueOf(offsetToken.getOffset()).length();
16 int endPosition = sqlTokens.size() – 1 == count ? originalSQL.length() : sqlTokens.get(count + 1).getBeginPosition();
17 sqlBuilder.appendLiterals(originalSQL.substring(beginPosition, endPosition));
18 } }
视频资料链接:
data:text/html;charset=UTF-8;base64,
5oGt5Zac5L2g77yM5p625p6E5biI5a2m5Lmg576k5Y+35pivNTc1NzUxODU0Cg==
复制粘贴在网站打开就可
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » SQL中间件源码分析:SQL 改写(2)