You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by GitBox <gi...@apache.org> on 2019/08/12 07:33:36 UTC

[GitHub] [incubator-shardingsphere] nameqxq opened a new issue #2853: I'm sure i only use mysql, can i only load mysql parse rule?

nameqxq opened a new issue #2853: I'm sure i only use mysql, can i only load mysql parse rule?
URL: https://github.com/apache/incubator-shardingsphere/issues/2853
 
 
   ## Feature Request
   
   **For English only**, other languages will not accept.
   
   Please pay attention on issues you submitted, because we maybe need more details. 
   If no response **more than 7 days** and we cannot make decision by current information, we will **close it**.
   
   Please answer these questions before submitting your issue. Thanks!
   
   ### Is your feature request related to a problem?
   
   ### Describe the feature you would like.
   #### I'm sure i only use mysql, when i exclusions other database pom dependencies:
   ``` shell
       <dependency>
           <groupId>org.apache.shardingsphere</groupId>
           <artifactId>sharding-jdbc-core</artifactId>
           <version>${sharding-jdbc.version}</version>
           <exclusions>
               <exclusion>
                   <artifactId>sharding-core-parse-oracle</artifactId>
                   <groupId>org.apache.shardingsphere</groupId>
               </exclusion>
               <exclusion>
                   <artifactId>sharding-core-parse-postgresql</artifactId>
                   <groupId>org.apache.shardingsphere</groupId>
               </exclusion>
               <exclusion>
                   <artifactId>sharding-core-parse-sqlserver</artifactId>
                   <groupId>org.apache.shardingsphere</groupId>
               </exclusion>
           </exclusions>
       </dependency>
   ```
   
   #### Then start project:
   ``` java
       java.lang.NullPointerException: Cannot load extractor rule definition file :META-INF/parsing-rule-definition/sharding/postgresql/extractor-rule-definition.xml, 
           at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:250)
           at org.apache.shardingsphere.core.parse.antlr.rule.jaxb.loader.extractor.ExtractorRuleDefinitionEntityLoader.load(ExtractorRuleDefinitionEntityLoader.java:39)
           at org.apache.shardingsphere.core.parse.antlr.rule.registry.ParsingRuleRegistry.initParserRuleDefinition(ParsingRuleRegistry.java:102)
           at org.apache.shardingsphere.core.parse.antlr.rule.registry.ParsingRuleRegistry.initParserRuleDefinitionFromCommon(ParsingRuleRegistry.java:93)
           at org.apache.shardingsphere.core.parse.antlr.rule.registry.ParsingRuleRegistry.initParserRuleDefinition(ParsingRuleRegistry.java:77)
           at org.apache.shardingsphere.core.parse.antlr.rule.registry.ParsingRuleRegistry.init(ParsingRuleRegistry.java:57)
           at org.apache.shardingsphere.core.parse.antlr.rule.registry.ShardingParsingRuleRegistry.getInstance(ShardingParsingRuleRegistry.java:47)
           at org.apache.shardingsphere.core.parse.antlr.AntlrParsingEngine.<init>(AntlrParsingEngine.java:58)
           at org.apache.shardingsphere.core.parse.old.parser.sql.SQLParserFactory.newInstance(SQLParserFactory.java:81)
           at org.apache.shardingsphere.core.parse.SQLParsingEngine.parse(SQLParsingEngine.java:61)
           ...
   ```
   
   #### So... can we do this in org.apache.shardingsphere.core.parse.antlr.AntlrParsingEngine#AntlrParsingEngine
   ``` java
       public AntlrParsingEngine(final DatabaseType databaseType, final String sql, final BaseRule rule, final ShardingTableMetaData shardingTableMetaData) {
           // i want expand ParsingRuleRegistry and override needParser(databaseType) 
           // to determine which databases parse rules I need to load ;
           // and configuration use it, like this:
           // 
           // spring.sharding.customizeParsingRuleRegistry: XxxParsingRuleRegistry
           // 
           // or only give a config propertis to declare which databases parse rule need to be loaded:
           // 
           // spring.sharding.loadParsingRules: mysql,oracle,...
   
           parsingRuleRegistry = rule instanceof EncryptRule ? EncryptParsingRuleRegistry.getInstance() : ShardingParsingRuleRegistry.getInstance();
           parserEngine = new SQLParserEngine(parsingRuleRegistry, databaseType, sql);
           extractorEngine = new SQLSegmentsExtractorEngine();
           fillerEngine = new SQLStatementFillerEngine(parsingRuleRegistry, databaseType, sql, rule, shardingTableMetaData);
           optimizerEngine = new SQLStatementOptimizerEngine(shardingTableMetaData);
       }
   ```
   
   
   #### many, thanks

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services