From 8f76b33214a39dd8a3afe80ad166bb1f33e1ff51 Mon Sep 17 00:00:00 2001 From: mcy Date: Fri, 25 Jan 2019 17:51:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E6=9E=90=E9=85=8D=E7=BD=AE=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/adapter/es/config/SchemaItem.java | 14 ++++++++++++++ .../canal/client/adapter/es/config/SqlParser.java | 15 +++++++++------ .../client/adapter/es/test/SqlParseTest.java | 2 +- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/config/SchemaItem.java b/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/config/SchemaItem.java index fc6e076c..5a3ab5b1 100644 --- a/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/config/SchemaItem.java +++ b/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/config/SchemaItem.java @@ -57,6 +57,11 @@ public class SchemaItem { this.selectFields = selectFields; } + public String toSql() { + // todo + return null; + } + public Map> getTableItemAliases() { if (tableItemAliases == null) { synchronized (SchemaItem.class) { @@ -316,6 +321,7 @@ public class SchemaItem { public static class FieldItem { private String fieldName; + private String expr; private List columnItems = new ArrayList<>(); private List owners = new ArrayList<>(); @@ -330,6 +336,14 @@ public class SchemaItem { this.fieldName = fieldName; } + public String getExpr() { + return expr; + } + + public void setExpr(String expr) { + this.expr = expr; + } + public List getColumnItems() { return columnItems; } diff --git a/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/config/SqlParser.java b/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/config/SqlParser.java index 0c2d7b2c..a0e4d83d 100644 --- a/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/config/SqlParser.java +++ b/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/config/SqlParser.java @@ -25,7 +25,7 @@ import com.alibaba.otter.canal.client.adapter.es.config.SchemaItem.TableItem; /** * ES同步指定sql格式解析 - * + * * @author rewerma 2018-10-26 下午03:45:49 * @version 1.0.0 */ @@ -33,7 +33,7 @@ public class SqlParser { /** * 解析sql - * + * * @param sql sql * @return 视图对象 */ @@ -66,7 +66,7 @@ public class SqlParser { /** * 归集字段 - * + * * @param sqlSelectQueryBlock sqlSelectQueryBlock * @return 字段属性列表 */ @@ -74,6 +74,7 @@ public class SqlParser { return sqlSelectQueryBlock.getSelectList().stream().map(selectItem -> { FieldItem fieldItem = new FieldItem(); fieldItem.setFieldName(selectItem.getAlias()); + fieldItem.setExpr(selectItem.toString()); visitColumn(selectItem.getExpr(), fieldItem); return fieldItem; }).collect(Collectors.toList()); @@ -81,7 +82,7 @@ public class SqlParser { /** * 解析字段 - * + * * @param expr sql expr * @param fieldItem 字段属性 */ @@ -91,6 +92,7 @@ public class SqlParser { SQLIdentifierExpr identifierExpr = (SQLIdentifierExpr) expr; if (fieldItem.getFieldName() == null) { fieldItem.setFieldName(identifierExpr.getName()); + fieldItem.setExpr(identifierExpr.toString()); } ColumnItem columnItem = new ColumnItem(); columnItem.setColumnName(identifierExpr.getName()); @@ -101,6 +103,7 @@ public class SqlParser { SQLPropertyExpr sqlPropertyExpr = (SQLPropertyExpr) expr; if (fieldItem.getFieldName() == null) { fieldItem.setFieldName(sqlPropertyExpr.getName()); + fieldItem.setExpr(sqlPropertyExpr.toString()); } fieldItem.getOwners().add(sqlPropertyExpr.getOwnernName()); ColumnItem columnItem = new ColumnItem(); @@ -123,7 +126,7 @@ public class SqlParser { /** * 解析表 - * + * * @param schemaItem 视图对象 * @param sqlTableSource sqlTableSource * @param tableItems 表对象列表 @@ -178,7 +181,7 @@ public class SqlParser { /** * 解析on条件 - * + * * @param expr sql expr * @param tableItem 表对象 */ diff --git a/client-adapter/elasticsearch/src/test/java/com/alibaba/otter/canal/client/adapter/es/test/SqlParseTest.java b/client-adapter/elasticsearch/src/test/java/com/alibaba/otter/canal/client/adapter/es/test/SqlParseTest.java index d07defe9..6c27e38b 100644 --- a/client-adapter/elasticsearch/src/test/java/com/alibaba/otter/canal/client/adapter/es/test/SqlParseTest.java +++ b/client-adapter/elasticsearch/src/test/java/com/alibaba/otter/canal/client/adapter/es/test/SqlParseTest.java @@ -29,7 +29,7 @@ public class SqlParseTest { Assert.assertFalse(tableItem.isMain()); Assert.assertTrue(tableItem.isSubQuery()); // 通过字段名找 FieldItem - List fieldItems = schemaItem.getColumnFields().get(tableItem.getAlias() + ".label".toLowerCase()); + List fieldItems = schemaItem.getColumnFields().get(tableItem.getAlias() + ".labels".toLowerCase()); fieldItems.forEach( fieldItem -> Assert.assertEquals("c.labels", fieldItem.getOwner() + "." + fieldItem.getFieldName()));