Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/ExpressionExtractor.java +17 −21 Original line number Diff line number Diff line Loading @@ -44,16 +44,12 @@ public final class ExpressionExtractor implements OptionalSQLSegmentExtractor { } private ExpressionSegment extractExpression(final ParserRuleContext expressionNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { if (ExtractorUtils.findFirstChildNode(expressionNode, RuleName.FUNCTION_CALL).isPresent() || ExtractorUtils.findFirstChildNodeNoneRecursive(expressionNode, RuleName.COLUMN_NAME).isPresent()) { return extractCommonExpressionSegment(expressionNode); Optional<ParserRuleContext> parameterMarkerNode = ExtractorUtils.findSingleNodeFromFirstDescendant(expressionNode, RuleName.PARAMETER_MARKER); if (parameterMarkerNode.isPresent()) { return extractLiteralExpressionSegment(parameterMarkerNode.get(), parameterMarkerIndexes); } return extractLiteralExpressionSegment(expressionNode, parameterMarkerIndexes); } // TODO extract column name and value from expression private ExpressionSegment extractCommonExpressionSegment(final ParserRuleContext functionNode) { return new CommonExpressionSegment(functionNode.getStart().getStartIndex(), functionNode.getStop().getStopIndex()); Optional<ParserRuleContext> literalsNode = ExtractorUtils.findSingleNodeFromFirstDescendant(expressionNode, RuleName.LITERALS); return literalsNode.isPresent() ? extractLiteralExpressionSegment(literalsNode.get(), parameterMarkerIndexes) : extractCommonExpressionSegment(expressionNode); } /** Loading @@ -67,23 +63,23 @@ public final class ExpressionExtractor implements OptionalSQLSegmentExtractor { LiteralExpressionSegment result = new LiteralExpressionSegment(expressionNode.getStart().getStartIndex(), expressionNode.getStop().getStopIndex()); Optional<ParserRuleContext> parameterMarkerNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.PARAMETER_MARKER); if (parameterMarkerNode.isPresent()) { Integer index = parameterMarkerIndexes.get(parameterMarkerNode.get()); result.setParameterMarkerIndex(index); result.setParameterMarkerIndex(parameterMarkerIndexes.get(parameterMarkerNode.get())); return result; } Optional<ParserRuleContext> bitExprNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.BIT_EXPR); if (bitExprNode.isPresent() && 1 != bitExprNode.get().getChildCount()) { return result; Optional<ParserRuleContext> numberLiteralsNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.NUMBER_LITERALS); if (numberLiteralsNode.isPresent()) { result.setLiterals(NumberUtil.getExactlyNumber(numberLiteralsNode.get().getText(), 10)); } Optional<ParserRuleContext> numberNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.NUMBER_LITERALS); if (numberNode.isPresent()) { result.setLiterals(NumberUtil.getExactlyNumber(numberNode.get().getText(), 10)); } Optional<ParserRuleContext> stringNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.STRING_LITERALS); if (stringNode.isPresent()) { String text = stringNode.get().getText(); Optional<ParserRuleContext> stringLiteralsNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.STRING_LITERALS); if (stringLiteralsNode.isPresent()) { String text = stringLiteralsNode.get().getText(); result.setLiterals(text.substring(1, text.length() - 1)); } return result; } // TODO extract column name and value from expression private ExpressionSegment extractCommonExpressionSegment(final ParserRuleContext functionNode) { return new CommonExpressionSegment(functionNode.getStart().getStartIndex(), functionNode.getStop().getStopIndex()); } } sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/util/ExtractorUtils.java +2 −2 Original line number Diff line number Diff line Loading @@ -94,13 +94,13 @@ public final class ExtractorUtils { } /** * Find node only from first descendant which only has one child. * Find single node from first descendant which only has one child. * * @param node start node * @param ruleName rule name * @return matched node */ public static Optional<ParserRuleContext> findNodeOnlyFromFirstDescendant(final ParserRuleContext node, final RuleName ruleName) { public static Optional<ParserRuleContext> findSingleNodeFromFirstDescendant(final ParserRuleContext node, final RuleName ruleName) { ParserRuleContext nextNode = node; do { if (isMatchedNode(nextNode, ruleName)) { Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/util/RuleName.java +2 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,8 @@ public enum RuleName { PARAMETER_MARKER("ParameterMarker"), LITERALS("Literals"), NUMBER_LITERALS("NumberLiterals"), STRING_LITERALS("StringLiterals"), Loading Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/ExpressionExtractor.java +17 −21 Original line number Diff line number Diff line Loading @@ -44,16 +44,12 @@ public final class ExpressionExtractor implements OptionalSQLSegmentExtractor { } private ExpressionSegment extractExpression(final ParserRuleContext expressionNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { if (ExtractorUtils.findFirstChildNode(expressionNode, RuleName.FUNCTION_CALL).isPresent() || ExtractorUtils.findFirstChildNodeNoneRecursive(expressionNode, RuleName.COLUMN_NAME).isPresent()) { return extractCommonExpressionSegment(expressionNode); Optional<ParserRuleContext> parameterMarkerNode = ExtractorUtils.findSingleNodeFromFirstDescendant(expressionNode, RuleName.PARAMETER_MARKER); if (parameterMarkerNode.isPresent()) { return extractLiteralExpressionSegment(parameterMarkerNode.get(), parameterMarkerIndexes); } return extractLiteralExpressionSegment(expressionNode, parameterMarkerIndexes); } // TODO extract column name and value from expression private ExpressionSegment extractCommonExpressionSegment(final ParserRuleContext functionNode) { return new CommonExpressionSegment(functionNode.getStart().getStartIndex(), functionNode.getStop().getStopIndex()); Optional<ParserRuleContext> literalsNode = ExtractorUtils.findSingleNodeFromFirstDescendant(expressionNode, RuleName.LITERALS); return literalsNode.isPresent() ? extractLiteralExpressionSegment(literalsNode.get(), parameterMarkerIndexes) : extractCommonExpressionSegment(expressionNode); } /** Loading @@ -67,23 +63,23 @@ public final class ExpressionExtractor implements OptionalSQLSegmentExtractor { LiteralExpressionSegment result = new LiteralExpressionSegment(expressionNode.getStart().getStartIndex(), expressionNode.getStop().getStopIndex()); Optional<ParserRuleContext> parameterMarkerNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.PARAMETER_MARKER); if (parameterMarkerNode.isPresent()) { Integer index = parameterMarkerIndexes.get(parameterMarkerNode.get()); result.setParameterMarkerIndex(index); result.setParameterMarkerIndex(parameterMarkerIndexes.get(parameterMarkerNode.get())); return result; } Optional<ParserRuleContext> bitExprNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.BIT_EXPR); if (bitExprNode.isPresent() && 1 != bitExprNode.get().getChildCount()) { return result; Optional<ParserRuleContext> numberLiteralsNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.NUMBER_LITERALS); if (numberLiteralsNode.isPresent()) { result.setLiterals(NumberUtil.getExactlyNumber(numberLiteralsNode.get().getText(), 10)); } Optional<ParserRuleContext> numberNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.NUMBER_LITERALS); if (numberNode.isPresent()) { result.setLiterals(NumberUtil.getExactlyNumber(numberNode.get().getText(), 10)); } Optional<ParserRuleContext> stringNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.STRING_LITERALS); if (stringNode.isPresent()) { String text = stringNode.get().getText(); Optional<ParserRuleContext> stringLiteralsNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.STRING_LITERALS); if (stringLiteralsNode.isPresent()) { String text = stringLiteralsNode.get().getText(); result.setLiterals(text.substring(1, text.length() - 1)); } return result; } // TODO extract column name and value from expression private ExpressionSegment extractCommonExpressionSegment(final ParserRuleContext functionNode) { return new CommonExpressionSegment(functionNode.getStart().getStartIndex(), functionNode.getStop().getStopIndex()); } }
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/util/ExtractorUtils.java +2 −2 Original line number Diff line number Diff line Loading @@ -94,13 +94,13 @@ public final class ExtractorUtils { } /** * Find node only from first descendant which only has one child. * Find single node from first descendant which only has one child. * * @param node start node * @param ruleName rule name * @return matched node */ public static Optional<ParserRuleContext> findNodeOnlyFromFirstDescendant(final ParserRuleContext node, final RuleName ruleName) { public static Optional<ParserRuleContext> findSingleNodeFromFirstDescendant(final ParserRuleContext node, final RuleName ruleName) { ParserRuleContext nextNode = node; do { if (isMatchedNode(nextNode, ruleName)) { Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/util/RuleName.java +2 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,8 @@ public enum RuleName { PARAMETER_MARKER("ParameterMarker"), LITERALS("Literals"), NUMBER_LITERALS("NumberLiterals"), STRING_LITERALS("StringLiterals"), Loading