mirror of
https://gitee.com/devlive-community/datacap.git
synced 2024-12-02 20:17:45 +08:00
[Plugin] Support zookeeper for native (#226)
This commit is contained in:
commit
f757d03fdf
@ -108,6 +108,9 @@ Here are some of the major database solutions that are supported:
|
||||
</a>
|
||||
<a href="https://ydb.tech/" target="_blank">
|
||||
<img src="assets/plugin/ydb.png" alt="YDB" height="50" />
|
||||
</a>
|
||||
<a href="https://zookeeper.apache.org/" target="_blank">
|
||||
<img src="assets/plugin/zookeeper.png" alt="Zookeeper" height="50" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
BIN
assets/plugin/zookeeper.png
Normal file
BIN
assets/plugin/zookeeper.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 194 KiB |
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
This file contains some false positive bugs detected by findbugs. Their
|
||||
false positive nature has been analyzed individually and they have been
|
||||
put here to instruct findbugs it must ignore them.
|
||||
-->
|
||||
<FindBugsFilter>
|
||||
<Match>
|
||||
<Package name="io.edurt.datacap.plugin.natived.zookeeper.sql" />
|
||||
</Match>
|
||||
</FindBugsFilter>
|
@ -15,5 +15,6 @@
|
||||
|
||||
<modules>
|
||||
<module>redis</module>
|
||||
<module>zookeeper</module>
|
||||
</modules>
|
||||
</project>
|
@ -62,4 +62,4 @@
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
</project>
|
||||
|
95
plugin/native/zookeeper/pom.xml
Normal file
95
plugin/native/zookeeper/pom.xml
Normal file
@ -0,0 +1,95 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>datacap-plugin-native</artifactId>
|
||||
<groupId>io.edurt.datacap.plugin.natived</groupId>
|
||||
<version>1.5.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>datacap-plugin-native-zookeeper</artifactId>
|
||||
<name>DataCap plugin for native (Zookeeper)</name>
|
||||
|
||||
<properties>
|
||||
<antlr4.version>4.9.3</antlr4.version>
|
||||
<zookeeper.version>0.11</zookeeper.version>
|
||||
<plugin.name>native-zookeeper</plugin.name>
|
||||
<antlr4.dir>${project.build.directory}/generated-sources/antlr4</antlr4.dir>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.edurt.datacap</groupId>
|
||||
<artifactId>datacap-spi</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.edurt.datacap.common</groupId>
|
||||
<artifactId>datacap-common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-beanutils</groupId>
|
||||
<artifactId>commons-beanutils</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.antlr</groupId>
|
||||
<artifactId>antlr4-runtime</artifactId>
|
||||
<version>${antlr4.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.101tec</groupId>
|
||||
<artifactId>zkclient</artifactId>
|
||||
<version>${zookeeper.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>${assembly-plugin.version}</version>
|
||||
<configuration>
|
||||
<finalName>${plugin.name}</finalName>
|
||||
<descriptors>
|
||||
<descriptor>../../../configure/assembly/assembly-plugin.xml</descriptor>
|
||||
</descriptors>
|
||||
<outputDirectory>../../../dist/plugins/${plugin.name}</outputDirectory>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-assembly</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.antlr</groupId>
|
||||
<artifactId>antlr4-maven-plugin</artifactId>
|
||||
<version>${antlr4.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>antlr4</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<arguments>
|
||||
<argument>-package</argument>
|
||||
<argument>io.edurt.datacap.plugin.natived.zookeeper.sql</argument>
|
||||
<argument>-o</argument>
|
||||
<argument>${antlr4.dir}/io/edurt/datacap/plugin/natived/zookeeper/sql</argument>
|
||||
</arguments>
|
||||
<sourceDirectory>${basedir}/src/main/antlr4/ZookeeperSql.g4</sourceDirectory>
|
||||
<listener>true</listener>
|
||||
<visitor>true</visitor>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
32
plugin/native/zookeeper/src/main/antlr4/ZookeeperSql.g4
Normal file
32
plugin/native/zookeeper/src/main/antlr4/ZookeeperSql.g4
Normal file
@ -0,0 +1,32 @@
|
||||
grammar ZookeeperSql;
|
||||
|
||||
singleStatement : statement EOF ;
|
||||
|
||||
statement : 'SELECT' selectElements fromClause ;
|
||||
|
||||
fromClause : 'FROM' qualifiedName;
|
||||
|
||||
selectElements : ID|'*' ;
|
||||
|
||||
ID : [a-zA-Z]+ ;
|
||||
|
||||
WS : [ \r\n\t]+ -> skip ;
|
||||
|
||||
QUOTED_IDENTIFIER
|
||||
: '"' ( ~'"' | '""' )* '"'
|
||||
;
|
||||
|
||||
BACKQUOTED_IDENTIFIER
|
||||
: '`' ( ~'`' | '``' )* '`'
|
||||
;
|
||||
|
||||
qualifiedName
|
||||
: identifier ('.' identifier)*
|
||||
;
|
||||
|
||||
identifier
|
||||
: IDENTIFIER
|
||||
| QUOTED_IDENTIFIER #quotedIdentifier
|
||||
| BACKQUOTED_IDENTIFIER #backQuotedIdentifier
|
||||
| DIGIT_IDENTIFIER #digitIdentifier
|
||||
;
|
@ -0,0 +1,101 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
import io.edurt.datacap.plugin.natived.zookeeper.sql.ZookeeperCaseInsensitiveStream;
|
||||
import io.edurt.datacap.plugin.natived.zookeeper.sql.ZookeeperSql;
|
||||
import io.edurt.datacap.plugin.natived.zookeeper.sql.ZookeeperSqlLexer;
|
||||
import io.edurt.datacap.plugin.natived.zookeeper.sql.ZookeeperSqlParser;
|
||||
import io.edurt.datacap.plugin.natived.zookeeper.sql.ZookeeperSqlVisitor;
|
||||
import io.edurt.datacap.spi.adapter.NativeAdapter;
|
||||
import io.edurt.datacap.spi.model.Configure;
|
||||
import io.edurt.datacap.spi.model.Response;
|
||||
import io.edurt.datacap.spi.model.Time;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.I0Itec.zkclient.ZkClient;
|
||||
import org.antlr.v4.runtime.CharStream;
|
||||
import org.antlr.v4.runtime.CharStreams;
|
||||
import org.antlr.v4.runtime.CommonTokenStream;
|
||||
import org.antlr.v4.runtime.atn.PredictionMode;
|
||||
import org.antlr.v4.runtime.tree.ParseTree;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@SuppressFBWarnings(value = {"RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE", "REC_CATCH_EXCEPTION"},
|
||||
justification = "I prefer to suppress these FindBugs warnings")
|
||||
public class ZookeeperAdapter
|
||||
extends NativeAdapter
|
||||
{
|
||||
protected ZookeeperConnection zookeeperConnection;
|
||||
|
||||
public ZookeeperAdapter(ZookeeperConnection zookeeperConnection)
|
||||
{
|
||||
super(zookeeperConnection);
|
||||
this.zookeeperConnection = zookeeperConnection;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response handlerExecute(String content)
|
||||
{
|
||||
Time processorTime = new Time();
|
||||
processorTime.setStart(new Date().getTime());
|
||||
Response response = this.zookeeperConnection.getResponse();
|
||||
Configure configure = this.zookeeperConnection.getConfigure();
|
||||
if (response.getIsConnected()) {
|
||||
List<String> headers = new ArrayList<>();
|
||||
List<String> types = new ArrayList<>();
|
||||
List<Object> columns = new ArrayList<>();
|
||||
try {
|
||||
CharStream stream = CharStreams.fromString(content);
|
||||
ZookeeperSqlLexer lexer = new ZookeeperSqlLexer(new ZookeeperCaseInsensitiveStream(stream));
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
||||
ZookeeperSqlParser parser = new ZookeeperSqlParser(tokens);
|
||||
parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
|
||||
parser.removeErrorListeners();
|
||||
|
||||
ParseTree tree = null;
|
||||
try {
|
||||
tree = parser.singleStatement();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Preconditions.checkArgument(false, "Not support this sql");
|
||||
}
|
||||
|
||||
ZookeeperSqlVisitor simpleSqlTreeVisitor = new ZookeeperSqlVisitor();
|
||||
if (ObjectUtils.isNotEmpty(tree)) {
|
||||
ZookeeperSql node = simpleSqlTreeVisitor.visit(tree);
|
||||
Preconditions.checkArgument(node.isSupport(), String.format("Not support type <%s>", node.getToken()));
|
||||
|
||||
ZkClient client = this.zookeeperConnection.getClient();
|
||||
headers.add(node.getColumns().get(0));
|
||||
types.add("String");
|
||||
if (node.getTable().equalsIgnoreCase("all")) {
|
||||
node.setTable("");
|
||||
}
|
||||
|
||||
client.getChildren("/" + node.getTable().replace(".", "/"))
|
||||
.forEach(column -> columns.add(handlerFormatter(configure.getFormat(), headers, Collections.singletonList(column))));
|
||||
response.setIsSuccessful(Boolean.TRUE);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
log.error("Execute content failed content {} exception ", content, ex);
|
||||
response.setIsSuccessful(Boolean.FALSE);
|
||||
response.setMessage(ex.getMessage());
|
||||
}
|
||||
finally {
|
||||
response.setHeaders(headers);
|
||||
response.setTypes(types);
|
||||
response.setColumns(columns);
|
||||
}
|
||||
}
|
||||
processorTime.setEnd(new Date().getTime());
|
||||
response.setProcessor(processorTime);
|
||||
return response;
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper;
|
||||
|
||||
import io.edurt.datacap.spi.connection.Connection;
|
||||
import io.edurt.datacap.spi.model.Configure;
|
||||
import io.edurt.datacap.spi.model.Response;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.I0Itec.zkclient.ZkClient;
|
||||
|
||||
@Slf4j
|
||||
public class ZookeeperConnection
|
||||
extends Connection
|
||||
{
|
||||
private Configure configure;
|
||||
private Response response;
|
||||
private ZkClient client;
|
||||
|
||||
public ZookeeperConnection(Configure configure, Response response)
|
||||
{
|
||||
super(configure, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String formatJdbcUrl()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected java.sql.Connection openConnection()
|
||||
{
|
||||
try {
|
||||
this.configure = getConfigure();
|
||||
this.response = getResponse();
|
||||
log.info("Connection url {}", formatJdbcUrl());
|
||||
this.client = new ZkClient(this.configure.getHost(), 60000, 5000);
|
||||
response.setIsConnected(Boolean.TRUE);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
log.error("Connection failed ", ex);
|
||||
response.setIsConnected(Boolean.FALSE);
|
||||
response.setMessage(ex.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
this.client.close();
|
||||
log.info("Connection close successful");
|
||||
}
|
||||
|
||||
public ZkClient getClient()
|
||||
{
|
||||
return client;
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper;
|
||||
|
||||
import io.edurt.datacap.spi.Plugin;
|
||||
import io.edurt.datacap.spi.PluginType;
|
||||
import io.edurt.datacap.spi.adapter.Adapter;
|
||||
import io.edurt.datacap.spi.connection.JdbcConfigure;
|
||||
import io.edurt.datacap.spi.model.Configure;
|
||||
import io.edurt.datacap.spi.model.Response;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.beanutils.BeanUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
|
||||
@Slf4j
|
||||
public class ZookeeperPlugin
|
||||
implements Plugin
|
||||
{
|
||||
private Configure configure;
|
||||
private ZookeeperConnection connection;
|
||||
private Response response;
|
||||
|
||||
@Override
|
||||
public String validator()
|
||||
{
|
||||
return "SELECT * FROM all";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String name()
|
||||
{
|
||||
return "Zookeeper";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description()
|
||||
{
|
||||
return "Integrate Zookeeper data sources";
|
||||
}
|
||||
|
||||
@Override
|
||||
public PluginType type()
|
||||
{
|
||||
return PluginType.NATIVE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connect(Configure configure)
|
||||
{
|
||||
try {
|
||||
this.response = new Response();
|
||||
this.configure = new JdbcConfigure();
|
||||
BeanUtils.copyProperties(this.configure, configure);
|
||||
this.connection = new ZookeeperConnection(this.configure, this.response);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
this.response.setIsConnected(Boolean.FALSE);
|
||||
this.response.setMessage(ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response execute(String content)
|
||||
{
|
||||
if (ObjectUtils.isNotEmpty(this.connection)) {
|
||||
log.info("Execute zookeeper plugin logic started");
|
||||
this.response = this.connection.getResponse();
|
||||
Adapter processor = new ZookeeperAdapter(this.connection);
|
||||
this.response = processor.handlerExecute(content);
|
||||
log.info("Execute zookeeper plugin logic end");
|
||||
}
|
||||
return this.response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
if (ObjectUtils.isNotEmpty(this.connection)) {
|
||||
this.connection.destroy();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper;
|
||||
|
||||
import com.google.inject.multibindings.Multibinder;
|
||||
import io.edurt.datacap.spi.AbstractPluginModule;
|
||||
import io.edurt.datacap.spi.Plugin;
|
||||
import io.edurt.datacap.spi.PluginModule;
|
||||
import io.edurt.datacap.spi.PluginType;
|
||||
|
||||
public class ZookeeperPluginModule
|
||||
extends AbstractPluginModule
|
||||
implements PluginModule
|
||||
{
|
||||
@Override
|
||||
public String getName()
|
||||
{
|
||||
return "Zookeeper";
|
||||
}
|
||||
|
||||
@Override
|
||||
public PluginType getType()
|
||||
{
|
||||
return PluginType.NATIVE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractPluginModule get()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
protected void configure()
|
||||
{
|
||||
Multibinder<String> module = Multibinder.newSetBinder(this.binder(), String.class);
|
||||
module.addBinding().toInstance(this.getClass().getSimpleName());
|
||||
Multibinder<Plugin> plugin = Multibinder.newSetBinder(this.binder(), Plugin.class);
|
||||
plugin.addBinding().to(ZookeeperPlugin.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper.sql;
|
||||
|
||||
import org.antlr.v4.runtime.CharStream;
|
||||
import org.antlr.v4.runtime.IntStream;
|
||||
import org.antlr.v4.runtime.misc.Interval;
|
||||
|
||||
public class ZookeeperCaseInsensitiveStream
|
||||
implements CharStream
|
||||
{
|
||||
private final CharStream stream;
|
||||
|
||||
public ZookeeperCaseInsensitiveStream(CharStream stream)
|
||||
{
|
||||
this.stream = stream;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Interval interval)
|
||||
{
|
||||
return stream.getText(interval);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void consume()
|
||||
{
|
||||
stream.consume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int LA(int i)
|
||||
{
|
||||
int result = stream.LA(i);
|
||||
|
||||
switch (result) {
|
||||
case 0:
|
||||
case IntStream.EOF:
|
||||
return result;
|
||||
default:
|
||||
return Character.toUpperCase(result);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int mark()
|
||||
{
|
||||
return stream.mark();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void release(int marker)
|
||||
{
|
||||
stream.release(marker);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int index()
|
||||
{
|
||||
return stream.index();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void seek(int index)
|
||||
{
|
||||
stream.seek(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size()
|
||||
{
|
||||
return stream.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSourceName()
|
||||
{
|
||||
return stream.getSourceName();
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
token literal names:
|
||||
null
|
||||
'SELECT'
|
||||
'FROM'
|
||||
'*'
|
||||
'.'
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
|
||||
token symbolic names:
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
ID
|
||||
WS
|
||||
QUOTED_IDENTIFIER
|
||||
BACKQUOTED_IDENTIFIER
|
||||
IDENTIFIER
|
||||
DIGIT_IDENTIFIER
|
||||
|
||||
rule names:
|
||||
singleStatement
|
||||
statement
|
||||
fromClause
|
||||
selectElements
|
||||
qualifiedName
|
||||
identifier
|
||||
|
||||
|
||||
atn:
|
||||
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 12, 37, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 7, 6, 30, 10, 6, 12, 6, 14, 6, 33, 11, 6, 3, 7, 3, 7, 3, 7, 2, 2, 8, 2, 4, 6, 8, 10, 12, 2, 4, 4, 2, 5, 5, 7, 7, 3, 2, 9, 12, 2, 31, 2, 14, 3, 2, 2, 2, 4, 17, 3, 2, 2, 2, 6, 21, 3, 2, 2, 2, 8, 24, 3, 2, 2, 2, 10, 26, 3, 2, 2, 2, 12, 34, 3, 2, 2, 2, 14, 15, 5, 4, 3, 2, 15, 16, 7, 2, 2, 3, 16, 3, 3, 2, 2, 2, 17, 18, 7, 3, 2, 2, 18, 19, 5, 8, 5, 2, 19, 20, 5, 6, 4, 2, 20, 5, 3, 2, 2, 2, 21, 22, 7, 4, 2, 2, 22, 23, 5, 10, 6, 2, 23, 7, 3, 2, 2, 2, 24, 25, 9, 2, 2, 2, 25, 9, 3, 2, 2, 2, 26, 31, 5, 12, 7, 2, 27, 28, 7, 6, 2, 2, 28, 30, 5, 12, 7, 2, 29, 27, 3, 2, 2, 2, 30, 33, 3, 2, 2, 2, 31, 29, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 11, 3, 2, 2, 2, 33, 31, 3, 2, 2, 2, 34, 35, 9, 3, 2, 2, 35, 13, 3, 2, 2, 2, 3, 31]
|
@ -0,0 +1,22 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper.sql;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ToString
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ZookeeperSql
|
||||
{
|
||||
private ZookeeperSqlToken token;
|
||||
private boolean from;
|
||||
private List<String> columns = new ArrayList<>();
|
||||
private String table;
|
||||
private boolean isSupport = false;
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
T__0=1
|
||||
T__1=2
|
||||
T__2=3
|
||||
T__3=4
|
||||
ID=5
|
||||
WS=6
|
||||
QUOTED_IDENTIFIER=7
|
||||
BACKQUOTED_IDENTIFIER=8
|
||||
IDENTIFIER=9
|
||||
DIGIT_IDENTIFIER=10
|
||||
'SELECT'=1
|
||||
'FROM'=2
|
||||
'*'=3
|
||||
'.'=4
|
@ -0,0 +1,191 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper.sql;
|
||||
// Generated from ZookeeperSql.g4 by ANTLR 4.9.3
|
||||
|
||||
import org.antlr.v4.runtime.ParserRuleContext;
|
||||
import org.antlr.v4.runtime.tree.ErrorNode;
|
||||
import org.antlr.v4.runtime.tree.TerminalNode;
|
||||
|
||||
/**
|
||||
* This class provides an empty implementation of {@link ZookeeperSqlListener},
|
||||
* which can be extended to create a listener which only needs to handle a subset
|
||||
* of the available methods.
|
||||
*/
|
||||
public class ZookeeperSqlBaseListener
|
||||
implements ZookeeperSqlListener
|
||||
{
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void enterSingleStatement(ZookeeperSqlParser.SingleStatementContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void exitSingleStatement(ZookeeperSqlParser.SingleStatementContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void enterStatement(ZookeeperSqlParser.StatementContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void exitStatement(ZookeeperSqlParser.StatementContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void enterFromClause(ZookeeperSqlParser.FromClauseContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void exitFromClause(ZookeeperSqlParser.FromClauseContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void enterSelectElements(ZookeeperSqlParser.SelectElementsContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void exitSelectElements(ZookeeperSqlParser.SelectElementsContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void enterQualifiedName(ZookeeperSqlParser.QualifiedNameContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void exitQualifiedName(ZookeeperSqlParser.QualifiedNameContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void enterUnquotedIdentifier(ZookeeperSqlParser.UnquotedIdentifierContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void exitUnquotedIdentifier(ZookeeperSqlParser.UnquotedIdentifierContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void enterQuotedIdentifier(ZookeeperSqlParser.QuotedIdentifierContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void exitQuotedIdentifier(ZookeeperSqlParser.QuotedIdentifierContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void enterBackQuotedIdentifier(ZookeeperSqlParser.BackQuotedIdentifierContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void exitBackQuotedIdentifier(ZookeeperSqlParser.BackQuotedIdentifierContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void enterDigitIdentifier(ZookeeperSqlParser.DigitIdentifierContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void exitDigitIdentifier(ZookeeperSqlParser.DigitIdentifierContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void enterEveryRule(ParserRuleContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void exitEveryRule(ParserRuleContext ctx) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void visitTerminal(TerminalNode node) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override
|
||||
public void visitErrorNode(ErrorNode node) {}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
token literal names:
|
||||
null
|
||||
'SELECT'
|
||||
'FROM'
|
||||
'*'
|
||||
'.'
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
|
||||
token symbolic names:
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
ID
|
||||
WS
|
||||
QUOTED_IDENTIFIER
|
||||
BACKQUOTED_IDENTIFIER
|
||||
|
||||
rule names:
|
||||
T__0
|
||||
T__1
|
||||
T__2
|
||||
T__3
|
||||
ID
|
||||
WS
|
||||
QUOTED_IDENTIFIER
|
||||
BACKQUOTED_IDENTIFIER
|
||||
|
||||
channel names:
|
||||
DEFAULT_TOKEN_CHANNEL
|
||||
HIDDEN
|
||||
|
||||
mode names:
|
||||
DEFAULT_MODE
|
||||
|
||||
atn:
|
||||
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 10, 69, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 6, 6, 37, 10, 6, 13, 6, 14, 6, 38, 3, 7, 6, 7, 42, 10, 7, 13, 7, 14, 7, 43, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 52, 10, 8, 12, 8, 14, 8, 55, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 63, 10, 9, 12, 9, 14, 9, 66, 11, 9, 3, 9, 3, 9, 2, 2, 10, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 3, 2, 6, 4, 2, 67, 92, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 3, 2, 36, 36, 3, 2, 98, 98, 2, 74, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 3, 19, 3, 2, 2, 2, 5, 26, 3, 2, 2, 2, 7, 31, 3, 2, 2, 2, 9, 33, 3, 2, 2, 2, 11, 36, 3, 2, 2, 2, 13, 41, 3, 2, 2, 2, 15, 47, 3, 2, 2, 2, 17, 58, 3, 2, 2, 2, 19, 20, 7, 85, 2, 2, 20, 21, 7, 71, 2, 2, 21, 22, 7, 78, 2, 2, 22, 23, 7, 71, 2, 2, 23, 24, 7, 69, 2, 2, 24, 25, 7, 86, 2, 2, 25, 4, 3, 2, 2, 2, 26, 27, 7, 72, 2, 2, 27, 28, 7, 84, 2, 2, 28, 29, 7, 81, 2, 2, 29, 30, 7, 79, 2, 2, 30, 6, 3, 2, 2, 2, 31, 32, 7, 44, 2, 2, 32, 8, 3, 2, 2, 2, 33, 34, 7, 48, 2, 2, 34, 10, 3, 2, 2, 2, 35, 37, 9, 2, 2, 2, 36, 35, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 36, 3, 2, 2, 2, 38, 39, 3, 2, 2, 2, 39, 12, 3, 2, 2, 2, 40, 42, 9, 3, 2, 2, 41, 40, 3, 2, 2, 2, 42, 43, 3, 2, 2, 2, 43, 41, 3, 2, 2, 2, 43, 44, 3, 2, 2, 2, 44, 45, 3, 2, 2, 2, 45, 46, 8, 7, 2, 2, 46, 14, 3, 2, 2, 2, 47, 53, 7, 36, 2, 2, 48, 52, 10, 4, 2, 2, 49, 50, 7, 36, 2, 2, 50, 52, 7, 36, 2, 2, 51, 48, 3, 2, 2, 2, 51, 49, 3, 2, 2, 2, 52, 55, 3, 2, 2, 2, 53, 51, 3, 2, 2, 2, 53, 54, 3, 2, 2, 2, 54, 56, 3, 2, 2, 2, 55, 53, 3, 2, 2, 2, 56, 57, 7, 36, 2, 2, 57, 16, 3, 2, 2, 2, 58, 64, 7, 98, 2, 2, 59, 63, 10, 5, 2, 2, 60, 61, 7, 98, 2, 2, 61, 63, 7, 98, 2, 2, 62, 59, 3, 2, 2, 2, 62, 60, 3, 2, 2, 2, 63, 66, 3, 2, 2, 2, 64, 62, 3, 2, 2, 2, 64, 65, 3, 2, 2, 2, 65, 67, 3, 2, 2, 2, 66, 64, 3, 2, 2, 2, 67, 68, 7, 98, 2, 2, 68, 18, 3, 2, 2, 2, 9, 2, 38, 43, 51, 53, 62, 64, 3, 8, 2, 2]
|
@ -0,0 +1,144 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper.sql;
|
||||
// Generated from ZookeeperSql.g4 by ANTLR 4.9.3
|
||||
|
||||
import org.antlr.v4.runtime.CharStream;
|
||||
import org.antlr.v4.runtime.Lexer;
|
||||
import org.antlr.v4.runtime.RuntimeMetaData;
|
||||
import org.antlr.v4.runtime.Vocabulary;
|
||||
import org.antlr.v4.runtime.VocabularyImpl;
|
||||
import org.antlr.v4.runtime.atn.ATN;
|
||||
import org.antlr.v4.runtime.atn.ATNDeserializer;
|
||||
import org.antlr.v4.runtime.atn.LexerATNSimulator;
|
||||
import org.antlr.v4.runtime.atn.PredictionContextCache;
|
||||
import org.antlr.v4.runtime.dfa.DFA;
|
||||
|
||||
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
|
||||
public class ZookeeperSqlLexer
|
||||
extends Lexer
|
||||
{
|
||||
static {
|
||||
RuntimeMetaData.checkVersion("4.9.3", RuntimeMetaData.VERSION);
|
||||
}
|
||||
|
||||
protected static final DFA[] _decisionToDFA;
|
||||
protected static final PredictionContextCache _sharedContextCache =
|
||||
new PredictionContextCache();
|
||||
public static final int
|
||||
T__0 = 1, T__1 = 2, T__2 = 3, T__3 = 4, ID = 5, WS = 6;
|
||||
public static String[] channelNames = {
|
||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
||||
};
|
||||
|
||||
public static String[] modeNames = {
|
||||
"DEFAULT_MODE"
|
||||
};
|
||||
|
||||
private static String[] makeRuleNames()
|
||||
{
|
||||
return new String[] {
|
||||
"T__0", "T__1", "T__2", "T__3", "ID", "WS"
|
||||
};
|
||||
}
|
||||
|
||||
public static final String[] ruleNames = makeRuleNames();
|
||||
|
||||
private static String[] makeLiteralNames()
|
||||
{
|
||||
return new String[] {
|
||||
null, "'SELECT'", "'FROM'", "'*'", "'.'"
|
||||
};
|
||||
}
|
||||
|
||||
private static final String[] _LITERAL_NAMES = makeLiteralNames();
|
||||
|
||||
private static String[] makeSymbolicNames()
|
||||
{
|
||||
return new String[] {
|
||||
null, null, null, null, null, "ID", "WS"
|
||||
};
|
||||
}
|
||||
|
||||
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
|
||||
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #VOCABULARY} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String[] tokenNames;
|
||||
|
||||
static {
|
||||
tokenNames = new String[_SYMBOLIC_NAMES.length];
|
||||
for (int i = 0; i < tokenNames.length; i++) {
|
||||
tokenNames[i] = VOCABULARY.getLiteralName(i);
|
||||
if (tokenNames[i] == null) {
|
||||
tokenNames[i] = VOCABULARY.getSymbolicName(i);
|
||||
}
|
||||
|
||||
if (tokenNames[i] == null) {
|
||||
tokenNames[i] = "<INVALID>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public String[] getTokenNames()
|
||||
{
|
||||
return tokenNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
public Vocabulary getVocabulary()
|
||||
{
|
||||
return VOCABULARY;
|
||||
}
|
||||
|
||||
public ZookeeperSqlLexer(CharStream input)
|
||||
{
|
||||
super(input);
|
||||
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGrammarFileName() {return "ZookeeperSql.g4";}
|
||||
|
||||
@Override
|
||||
public String[] getRuleNames() {return ruleNames;}
|
||||
|
||||
@Override
|
||||
public String getSerializedATN() {return _serializedATN;}
|
||||
|
||||
@Override
|
||||
public String[] getChannelNames() {return channelNames;}
|
||||
|
||||
@Override
|
||||
public String[] getModeNames() {return modeNames;}
|
||||
|
||||
@Override
|
||||
public ATN getATN() {return _ATN;}
|
||||
|
||||
public static final String _serializedATN =
|
||||
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\b+\b\1\4\2\t\2\4" +
|
||||
"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\3" +
|
||||
"\3\3\3\3\3\3\3\3\3\4\3\4\3\5\3\5\3\6\6\6!\n\6\r\6\16\6\"\3\7\6\7&\n\7" +
|
||||
"\r\7\16\7\'\3\7\3\7\2\2\b\3\3\5\4\7\5\t\6\13\7\r\b\3\2\4\4\2C\\c|\5\2" +
|
||||
"\13\f\17\17\"\"\2,\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13" +
|
||||
"\3\2\2\2\2\r\3\2\2\2\3\17\3\2\2\2\5\26\3\2\2\2\7\33\3\2\2\2\t\35\3\2\2" +
|
||||
"\2\13 \3\2\2\2\r%\3\2\2\2\17\20\7U\2\2\20\21\7G\2\2\21\22\7N\2\2\22\23" +
|
||||
"\7G\2\2\23\24\7E\2\2\24\25\7V\2\2\25\4\3\2\2\2\26\27\7H\2\2\27\30\7T\2" +
|
||||
"\2\30\31\7Q\2\2\31\32\7O\2\2\32\6\3\2\2\2\33\34\7,\2\2\34\b\3\2\2\2\35" +
|
||||
"\36\7\60\2\2\36\n\3\2\2\2\37!\t\2\2\2 \37\3\2\2\2!\"\3\2\2\2\" \3\2\2" +
|
||||
"\2\"#\3\2\2\2#\f\3\2\2\2$&\t\3\2\2%$\3\2\2\2&\'\3\2\2\2\'%\3\2\2\2\'(" +
|
||||
"\3\2\2\2()\3\2\2\2)*\b\7\2\2*\16\3\2\2\2\5\2\"\'\3\b\2\2";
|
||||
public static final ATN _ATN =
|
||||
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
||||
|
||||
static {
|
||||
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
|
||||
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
|
||||
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
T__0=1
|
||||
T__1=2
|
||||
T__2=3
|
||||
T__3=4
|
||||
ID=5
|
||||
WS=6
|
||||
QUOTED_IDENTIFIER=7
|
||||
BACKQUOTED_IDENTIFIER=8
|
||||
'SELECT'=1
|
||||
'FROM'=2
|
||||
'*'=3
|
||||
'.'=4
|
@ -0,0 +1,146 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper.sql;
|
||||
// Generated from ZookeeperSql.g4 by ANTLR 4.9.3
|
||||
|
||||
import org.antlr.v4.runtime.tree.ParseTreeListener;
|
||||
|
||||
/**
|
||||
* This interface defines a complete listener for a parse tree produced by
|
||||
* {@link ZookeeperSqlParser}.
|
||||
*/
|
||||
public interface ZookeeperSqlListener
|
||||
extends ParseTreeListener
|
||||
{
|
||||
/**
|
||||
* Enter a parse tree produced by {@link ZookeeperSqlParser#singleStatement}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterSingleStatement(ZookeeperSqlParser.SingleStatementContext ctx);
|
||||
|
||||
/**
|
||||
* Exit a parse tree produced by {@link ZookeeperSqlParser#singleStatement}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitSingleStatement(ZookeeperSqlParser.SingleStatementContext ctx);
|
||||
|
||||
/**
|
||||
* Enter a parse tree produced by {@link ZookeeperSqlParser#statement}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterStatement(ZookeeperSqlParser.StatementContext ctx);
|
||||
|
||||
/**
|
||||
* Exit a parse tree produced by {@link ZookeeperSqlParser#statement}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitStatement(ZookeeperSqlParser.StatementContext ctx);
|
||||
|
||||
/**
|
||||
* Enter a parse tree produced by {@link ZookeeperSqlParser#fromClause}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterFromClause(ZookeeperSqlParser.FromClauseContext ctx);
|
||||
|
||||
/**
|
||||
* Exit a parse tree produced by {@link ZookeeperSqlParser#fromClause}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitFromClause(ZookeeperSqlParser.FromClauseContext ctx);
|
||||
|
||||
/**
|
||||
* Enter a parse tree produced by {@link ZookeeperSqlParser#selectElements}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterSelectElements(ZookeeperSqlParser.SelectElementsContext ctx);
|
||||
|
||||
/**
|
||||
* Exit a parse tree produced by {@link ZookeeperSqlParser#selectElements}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitSelectElements(ZookeeperSqlParser.SelectElementsContext ctx);
|
||||
|
||||
/**
|
||||
* Enter a parse tree produced by {@link ZookeeperSqlParser#qualifiedName}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterQualifiedName(ZookeeperSqlParser.QualifiedNameContext ctx);
|
||||
|
||||
/**
|
||||
* Exit a parse tree produced by {@link ZookeeperSqlParser#qualifiedName}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitQualifiedName(ZookeeperSqlParser.QualifiedNameContext ctx);
|
||||
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code unquotedIdentifier}
|
||||
* labeled alternative in {@link ZookeeperSqlParser#identifier}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterUnquotedIdentifier(ZookeeperSqlParser.UnquotedIdentifierContext ctx);
|
||||
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code unquotedIdentifier}
|
||||
* labeled alternative in {@link ZookeeperSqlParser#identifier}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitUnquotedIdentifier(ZookeeperSqlParser.UnquotedIdentifierContext ctx);
|
||||
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code quotedIdentifier}
|
||||
* labeled alternative in {@link ZookeeperSqlParser#identifier}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterQuotedIdentifier(ZookeeperSqlParser.QuotedIdentifierContext ctx);
|
||||
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code quotedIdentifier}
|
||||
* labeled alternative in {@link ZookeeperSqlParser#identifier}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitQuotedIdentifier(ZookeeperSqlParser.QuotedIdentifierContext ctx);
|
||||
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code backQuotedIdentifier}
|
||||
* labeled alternative in {@link ZookeeperSqlParser#identifier}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterBackQuotedIdentifier(ZookeeperSqlParser.BackQuotedIdentifierContext ctx);
|
||||
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code backQuotedIdentifier}
|
||||
* labeled alternative in {@link ZookeeperSqlParser#identifier}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitBackQuotedIdentifier(ZookeeperSqlParser.BackQuotedIdentifierContext ctx);
|
||||
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code digitIdentifier}
|
||||
* labeled alternative in {@link ZookeeperSqlParser#identifier}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterDigitIdentifier(ZookeeperSqlParser.DigitIdentifierContext ctx);
|
||||
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code digitIdentifier}
|
||||
* labeled alternative in {@link ZookeeperSqlParser#identifier}.
|
||||
*
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitDigitIdentifier(ZookeeperSqlParser.DigitIdentifierContext ctx);
|
||||
}
|
@ -0,0 +1,640 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper.sql;
|
||||
// Generated from ZookeeperSql.g4 by ANTLR 4.9.3
|
||||
|
||||
import org.antlr.v4.runtime.NoViableAltException;
|
||||
import org.antlr.v4.runtime.Parser;
|
||||
import org.antlr.v4.runtime.ParserRuleContext;
|
||||
import org.antlr.v4.runtime.RecognitionException;
|
||||
import org.antlr.v4.runtime.RuntimeMetaData;
|
||||
import org.antlr.v4.runtime.Token;
|
||||
import org.antlr.v4.runtime.TokenStream;
|
||||
import org.antlr.v4.runtime.Vocabulary;
|
||||
import org.antlr.v4.runtime.VocabularyImpl;
|
||||
import org.antlr.v4.runtime.atn.ATN;
|
||||
import org.antlr.v4.runtime.atn.ATNDeserializer;
|
||||
import org.antlr.v4.runtime.atn.ParserATNSimulator;
|
||||
import org.antlr.v4.runtime.atn.PredictionContextCache;
|
||||
import org.antlr.v4.runtime.dfa.DFA;
|
||||
import org.antlr.v4.runtime.tree.ParseTreeListener;
|
||||
import org.antlr.v4.runtime.tree.TerminalNode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
|
||||
public class ZookeeperSqlParser
|
||||
extends Parser
|
||||
{
|
||||
static {
|
||||
RuntimeMetaData.checkVersion("4.9.3", RuntimeMetaData.VERSION);
|
||||
}
|
||||
|
||||
protected static final DFA[] _decisionToDFA;
|
||||
protected static final PredictionContextCache _sharedContextCache =
|
||||
new PredictionContextCache();
|
||||
public static final int
|
||||
T__0 = 1, T__1 = 2, T__2 = 3, T__3 = 4, ID = 5, WS = 6, IDENTIFIER = 7, QUOTED_IDENTIFIER = 8,
|
||||
BACKQUOTED_IDENTIFIER = 9, DIGIT_IDENTIFIER = 10;
|
||||
public static final int
|
||||
RULE_singleStatement = 0, RULE_statement = 1, RULE_fromClause = 2, RULE_selectElements = 3,
|
||||
RULE_qualifiedName = 4, RULE_identifier = 5;
|
||||
|
||||
private static String[] makeRuleNames()
|
||||
{
|
||||
return new String[] {
|
||||
"singleStatement", "statement", "fromClause", "selectElements", "qualifiedName",
|
||||
"identifier"
|
||||
};
|
||||
}
|
||||
|
||||
public static final String[] ruleNames = makeRuleNames();
|
||||
|
||||
private static String[] makeLiteralNames()
|
||||
{
|
||||
return new String[] {
|
||||
null, "'SELECT'", "'FROM'", "'*'", "'.'"
|
||||
};
|
||||
}
|
||||
|
||||
private static final String[] _LITERAL_NAMES = makeLiteralNames();
|
||||
|
||||
private static String[] makeSymbolicNames()
|
||||
{
|
||||
return new String[] {
|
||||
null, null, null, null, null, "ID", "WS", "IDENTIFIER", "QUOTED_IDENTIFIER",
|
||||
"BACKQUOTED_IDENTIFIER", "DIGIT_IDENTIFIER"
|
||||
};
|
||||
}
|
||||
|
||||
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
|
||||
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #VOCABULARY} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String[] tokenNames;
|
||||
|
||||
static {
|
||||
tokenNames = new String[_SYMBOLIC_NAMES.length];
|
||||
for (int i = 0; i < tokenNames.length; i++) {
|
||||
tokenNames[i] = VOCABULARY.getLiteralName(i);
|
||||
if (tokenNames[i] == null) {
|
||||
tokenNames[i] = VOCABULARY.getSymbolicName(i);
|
||||
}
|
||||
|
||||
if (tokenNames[i] == null) {
|
||||
tokenNames[i] = "<INVALID>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public String[] getTokenNames()
|
||||
{
|
||||
return tokenNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
public Vocabulary getVocabulary()
|
||||
{
|
||||
return VOCABULARY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGrammarFileName() {return "ZookeeperSql.g4";}
|
||||
|
||||
@Override
|
||||
public String[] getRuleNames() {return ruleNames;}
|
||||
|
||||
@Override
|
||||
public String getSerializedATN() {return _serializedATN;}
|
||||
|
||||
@Override
|
||||
public ATN getATN() {return _ATN;}
|
||||
|
||||
public ZookeeperSqlParser(TokenStream input)
|
||||
{
|
||||
super(input);
|
||||
_interp = new ParserATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
|
||||
}
|
||||
|
||||
public static class SingleStatementContext
|
||||
extends ParserRuleContext
|
||||
{
|
||||
public StatementContext statement()
|
||||
{
|
||||
return getRuleContext(StatementContext.class, 0);
|
||||
}
|
||||
|
||||
public TerminalNode EOF() {return getToken(ZookeeperSqlParser.EOF, 0);}
|
||||
|
||||
public SingleStatementContext(ParserRuleContext parent, int invokingState)
|
||||
{
|
||||
super(parent, invokingState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRuleIndex() {return RULE_singleStatement;}
|
||||
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).enterSingleStatement(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).exitSingleStatement(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public final SingleStatementContext singleStatement()
|
||||
throws RecognitionException
|
||||
{
|
||||
SingleStatementContext _localctx = new SingleStatementContext(_ctx, getState());
|
||||
enterRule(_localctx, 0, RULE_singleStatement);
|
||||
try {
|
||||
enterOuterAlt(_localctx, 1);
|
||||
{
|
||||
setState(12);
|
||||
statement();
|
||||
setState(13);
|
||||
match(EOF);
|
||||
}
|
||||
}
|
||||
catch (RecognitionException re) {
|
||||
_localctx.exception = re;
|
||||
_errHandler.reportError(this, re);
|
||||
_errHandler.recover(this, re);
|
||||
}
|
||||
finally {
|
||||
exitRule();
|
||||
}
|
||||
return _localctx;
|
||||
}
|
||||
|
||||
public static class StatementContext
|
||||
extends ParserRuleContext
|
||||
{
|
||||
public SelectElementsContext selectElements()
|
||||
{
|
||||
return getRuleContext(SelectElementsContext.class, 0);
|
||||
}
|
||||
|
||||
public FromClauseContext fromClause()
|
||||
{
|
||||
return getRuleContext(FromClauseContext.class, 0);
|
||||
}
|
||||
|
||||
public StatementContext(ParserRuleContext parent, int invokingState)
|
||||
{
|
||||
super(parent, invokingState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRuleIndex() {return RULE_statement;}
|
||||
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).enterStatement(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).exitStatement(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public final StatementContext statement()
|
||||
throws RecognitionException
|
||||
{
|
||||
StatementContext _localctx = new StatementContext(_ctx, getState());
|
||||
enterRule(_localctx, 2, RULE_statement);
|
||||
try {
|
||||
enterOuterAlt(_localctx, 1);
|
||||
{
|
||||
setState(15);
|
||||
match(T__0);
|
||||
setState(16);
|
||||
selectElements();
|
||||
setState(17);
|
||||
fromClause();
|
||||
}
|
||||
}
|
||||
catch (RecognitionException re) {
|
||||
_localctx.exception = re;
|
||||
_errHandler.reportError(this, re);
|
||||
_errHandler.recover(this, re);
|
||||
}
|
||||
finally {
|
||||
exitRule();
|
||||
}
|
||||
return _localctx;
|
||||
}
|
||||
|
||||
public static class FromClauseContext
|
||||
extends ParserRuleContext
|
||||
{
|
||||
public QualifiedNameContext qualifiedName()
|
||||
{
|
||||
return getRuleContext(QualifiedNameContext.class, 0);
|
||||
}
|
||||
|
||||
public FromClauseContext(ParserRuleContext parent, int invokingState)
|
||||
{
|
||||
super(parent, invokingState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRuleIndex() {return RULE_fromClause;}
|
||||
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).enterFromClause(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).exitFromClause(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public final FromClauseContext fromClause()
|
||||
throws RecognitionException
|
||||
{
|
||||
FromClauseContext _localctx = new FromClauseContext(_ctx, getState());
|
||||
enterRule(_localctx, 4, RULE_fromClause);
|
||||
try {
|
||||
enterOuterAlt(_localctx, 1);
|
||||
{
|
||||
setState(19);
|
||||
match(T__1);
|
||||
setState(20);
|
||||
qualifiedName();
|
||||
}
|
||||
}
|
||||
catch (RecognitionException re) {
|
||||
_localctx.exception = re;
|
||||
_errHandler.reportError(this, re);
|
||||
_errHandler.recover(this, re);
|
||||
}
|
||||
finally {
|
||||
exitRule();
|
||||
}
|
||||
return _localctx;
|
||||
}
|
||||
|
||||
public static class SelectElementsContext
|
||||
extends ParserRuleContext
|
||||
{
|
||||
public TerminalNode ID() {return getToken(ZookeeperSqlParser.ID, 0);}
|
||||
|
||||
public SelectElementsContext(ParserRuleContext parent, int invokingState)
|
||||
{
|
||||
super(parent, invokingState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRuleIndex() {return RULE_selectElements;}
|
||||
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).enterSelectElements(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).exitSelectElements(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public final SelectElementsContext selectElements()
|
||||
throws RecognitionException
|
||||
{
|
||||
SelectElementsContext _localctx = new SelectElementsContext(_ctx, getState());
|
||||
enterRule(_localctx, 6, RULE_selectElements);
|
||||
int _la;
|
||||
try {
|
||||
enterOuterAlt(_localctx, 1);
|
||||
{
|
||||
setState(22);
|
||||
_la = _input.LA(1);
|
||||
if (!(_la == T__2 || _la == ID)) {
|
||||
_errHandler.recoverInline(this);
|
||||
}
|
||||
else {
|
||||
if (_input.LA(1) == Token.EOF) {
|
||||
matchedEOF = true;
|
||||
}
|
||||
_errHandler.reportMatch(this);
|
||||
consume();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (RecognitionException re) {
|
||||
_localctx.exception = re;
|
||||
_errHandler.reportError(this, re);
|
||||
_errHandler.recover(this, re);
|
||||
}
|
||||
finally {
|
||||
exitRule();
|
||||
}
|
||||
return _localctx;
|
||||
}
|
||||
|
||||
public static class QualifiedNameContext
|
||||
extends ParserRuleContext
|
||||
{
|
||||
public List<IdentifierContext> identifier()
|
||||
{
|
||||
return getRuleContexts(IdentifierContext.class);
|
||||
}
|
||||
|
||||
public IdentifierContext identifier(int i)
|
||||
{
|
||||
return getRuleContext(IdentifierContext.class, i);
|
||||
}
|
||||
|
||||
public QualifiedNameContext(ParserRuleContext parent, int invokingState)
|
||||
{
|
||||
super(parent, invokingState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRuleIndex() {return RULE_qualifiedName;}
|
||||
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).enterQualifiedName(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).exitQualifiedName(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public final QualifiedNameContext qualifiedName()
|
||||
throws RecognitionException
|
||||
{
|
||||
QualifiedNameContext _localctx = new QualifiedNameContext(_ctx, getState());
|
||||
enterRule(_localctx, 8, RULE_qualifiedName);
|
||||
int _la;
|
||||
try {
|
||||
enterOuterAlt(_localctx, 1);
|
||||
{
|
||||
setState(24);
|
||||
identifier();
|
||||
setState(29);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
while (_la == T__3) {
|
||||
{
|
||||
{
|
||||
setState(25);
|
||||
match(T__3);
|
||||
setState(26);
|
||||
identifier();
|
||||
}
|
||||
}
|
||||
setState(31);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (RecognitionException re) {
|
||||
_localctx.exception = re;
|
||||
_errHandler.reportError(this, re);
|
||||
_errHandler.recover(this, re);
|
||||
}
|
||||
finally {
|
||||
exitRule();
|
||||
}
|
||||
return _localctx;
|
||||
}
|
||||
|
||||
public static class IdentifierContext
|
||||
extends ParserRuleContext
|
||||
{
|
||||
public IdentifierContext(ParserRuleContext parent, int invokingState)
|
||||
{
|
||||
super(parent, invokingState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRuleIndex() {return RULE_identifier;}
|
||||
|
||||
public IdentifierContext() {}
|
||||
|
||||
public void copyFrom(IdentifierContext ctx)
|
||||
{
|
||||
super.copyFrom(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
public static class BackQuotedIdentifierContext
|
||||
extends IdentifierContext
|
||||
{
|
||||
public TerminalNode BACKQUOTED_IDENTIFIER() {return getToken(ZookeeperSqlParser.BACKQUOTED_IDENTIFIER, 0);}
|
||||
|
||||
public BackQuotedIdentifierContext(IdentifierContext ctx) {copyFrom(ctx);}
|
||||
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).enterBackQuotedIdentifier(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).exitBackQuotedIdentifier(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class QuotedIdentifierContext
|
||||
extends IdentifierContext
|
||||
{
|
||||
public TerminalNode QUOTED_IDENTIFIER() {return getToken(ZookeeperSqlParser.QUOTED_IDENTIFIER, 0);}
|
||||
|
||||
public QuotedIdentifierContext(IdentifierContext ctx) {copyFrom(ctx);}
|
||||
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).enterQuotedIdentifier(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).exitQuotedIdentifier(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class DigitIdentifierContext
|
||||
extends IdentifierContext
|
||||
{
|
||||
public TerminalNode DIGIT_IDENTIFIER() {return getToken(ZookeeperSqlParser.DIGIT_IDENTIFIER, 0);}
|
||||
|
||||
public DigitIdentifierContext(IdentifierContext ctx) {copyFrom(ctx);}
|
||||
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).enterDigitIdentifier(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).exitDigitIdentifier(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class UnquotedIdentifierContext
|
||||
extends IdentifierContext
|
||||
{
|
||||
public TerminalNode IDENTIFIER() {return getToken(ZookeeperSqlParser.IDENTIFIER, 0);}
|
||||
|
||||
public UnquotedIdentifierContext(IdentifierContext ctx) {copyFrom(ctx);}
|
||||
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).enterUnquotedIdentifier(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener)
|
||||
{
|
||||
if (listener instanceof ZookeeperSqlListener) {
|
||||
((ZookeeperSqlListener) listener).exitUnquotedIdentifier(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public final IdentifierContext identifier()
|
||||
throws RecognitionException
|
||||
{
|
||||
IdentifierContext _localctx = new IdentifierContext(_ctx, getState());
|
||||
enterRule(_localctx, 10, RULE_identifier);
|
||||
try {
|
||||
setState(36);
|
||||
_errHandler.sync(this);
|
||||
switch (_input.LA(1)) {
|
||||
case IDENTIFIER:
|
||||
_localctx = new UnquotedIdentifierContext(_localctx);
|
||||
enterOuterAlt(_localctx, 1);
|
||||
{
|
||||
setState(32);
|
||||
match(IDENTIFIER);
|
||||
}
|
||||
break;
|
||||
case QUOTED_IDENTIFIER:
|
||||
_localctx = new QuotedIdentifierContext(_localctx);
|
||||
enterOuterAlt(_localctx, 2);
|
||||
{
|
||||
setState(33);
|
||||
match(QUOTED_IDENTIFIER);
|
||||
}
|
||||
break;
|
||||
case BACKQUOTED_IDENTIFIER:
|
||||
_localctx = new BackQuotedIdentifierContext(_localctx);
|
||||
enterOuterAlt(_localctx, 3);
|
||||
{
|
||||
setState(34);
|
||||
match(BACKQUOTED_IDENTIFIER);
|
||||
}
|
||||
break;
|
||||
case DIGIT_IDENTIFIER:
|
||||
_localctx = new DigitIdentifierContext(_localctx);
|
||||
enterOuterAlt(_localctx, 4);
|
||||
{
|
||||
setState(35);
|
||||
match(DIGIT_IDENTIFIER);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new NoViableAltException(this);
|
||||
}
|
||||
}
|
||||
catch (RecognitionException re) {
|
||||
_localctx.exception = re;
|
||||
_errHandler.reportError(this, re);
|
||||
_errHandler.recover(this, re);
|
||||
}
|
||||
finally {
|
||||
exitRule();
|
||||
}
|
||||
return _localctx;
|
||||
}
|
||||
|
||||
public static final String _serializedATN =
|
||||
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\f)\4\2\t\2\4\3\t" +
|
||||
"\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4" +
|
||||
"\3\4\3\5\3\5\3\6\3\6\3\6\7\6\36\n\6\f\6\16\6!\13\6\3\7\3\7\3\7\3\7\5\7" +
|
||||
"\'\n\7\3\7\2\2\b\2\4\6\b\n\f\2\3\4\2\5\5\7\7\2&\2\16\3\2\2\2\4\21\3\2" +
|
||||
"\2\2\6\25\3\2\2\2\b\30\3\2\2\2\n\32\3\2\2\2\f&\3\2\2\2\16\17\5\4\3\2\17" +
|
||||
"\20\7\2\2\3\20\3\3\2\2\2\21\22\7\3\2\2\22\23\5\b\5\2\23\24\5\6\4\2\24" +
|
||||
"\5\3\2\2\2\25\26\7\4\2\2\26\27\5\n\6\2\27\7\3\2\2\2\30\31\t\2\2\2\31\t" +
|
||||
"\3\2\2\2\32\37\5\f\7\2\33\34\7\6\2\2\34\36\5\f\7\2\35\33\3\2\2\2\36!\3" +
|
||||
"\2\2\2\37\35\3\2\2\2\37 \3\2\2\2 \13\3\2\2\2!\37\3\2\2\2\"\'\7\t\2\2#" +
|
||||
"\'\7\n\2\2$\'\7\13\2\2%\'\7\f\2\2&\"\3\2\2\2&#\3\2\2\2&$\3\2\2\2&%\3\2" +
|
||||
"\2\2\'\r\3\2\2\2\4\37&";
|
||||
public static final ATN _ATN =
|
||||
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
||||
|
||||
static {
|
||||
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
|
||||
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
|
||||
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper.sql;
|
||||
|
||||
public enum ZookeeperSqlToken
|
||||
{
|
||||
SELECT
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper.sql;
|
||||
|
||||
import org.antlr.v4.runtime.tree.ErrorNode;
|
||||
import org.antlr.v4.runtime.tree.ParseTree;
|
||||
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
|
||||
import org.antlr.v4.runtime.tree.RuleNode;
|
||||
import org.antlr.v4.runtime.tree.TerminalNode;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class ZookeeperSqlVisitor
|
||||
implements ParseTreeVisitor<ZookeeperSql>
|
||||
{
|
||||
ZookeeperSql configure;
|
||||
|
||||
public ZookeeperSqlVisitor()
|
||||
{
|
||||
configure = new ZookeeperSql();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZookeeperSql visit(ParseTree tree)
|
||||
{
|
||||
int childCount = tree.getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
ParseTree child = tree.getChild(i);
|
||||
if (child instanceof ZookeeperSqlParser.StatementContext) {
|
||||
ZookeeperSqlParser.StatementContext statementContext = (ZookeeperSqlParser.StatementContext) child;
|
||||
handlerWithStatement(statementContext);
|
||||
}
|
||||
}
|
||||
return configure;
|
||||
}
|
||||
|
||||
private void handlerWithStatement(ZookeeperSqlParser.StatementContext statementContext)
|
||||
{
|
||||
int childCount = statementContext.getChildCount();
|
||||
int i = 0;
|
||||
for (; i < childCount; i++) {
|
||||
ParseTree child = statementContext.getChild(i);
|
||||
if (child instanceof ZookeeperSqlParser.SelectElementsContext) {
|
||||
configure.setColumns(Arrays.asList(child.getText()));
|
||||
}
|
||||
else if (child instanceof ZookeeperSqlParser.FromClauseContext) {
|
||||
configure.setTable(child.getChild(1).getText());
|
||||
configure.setFrom(true);
|
||||
}
|
||||
else if (child instanceof TerminalNode) {
|
||||
if (child.getText().equalsIgnoreCase("SELECT")) {
|
||||
configure.setSupport(true);
|
||||
configure.setToken(ZookeeperSqlToken.SELECT);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZookeeperSql visitChildren(RuleNode node)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZookeeperSql visitTerminal(TerminalNode node)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZookeeperSql visitErrorNode(ErrorNode node)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
io.edurt.datacap.plugin.natived.zookeeper.ZookeeperPluginModule
|
@ -0,0 +1,30 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper;
|
||||
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.TypeLiteral;
|
||||
import io.edurt.datacap.spi.Plugin;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class ZookeeperPluginModuleTest
|
||||
{
|
||||
private Injector injector;
|
||||
|
||||
@Before
|
||||
public void before()
|
||||
{
|
||||
this.injector = Guice.createInjector(new ZookeeperPluginModule());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test()
|
||||
{
|
||||
Set<Plugin> plugins = injector.getInstance(Key.get(new TypeLiteral<Set<Plugin>>() {}));
|
||||
Assert.assertTrue(plugins.size() > 0);
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper;
|
||||
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.TypeLiteral;
|
||||
import io.edurt.datacap.spi.Plugin;
|
||||
import io.edurt.datacap.spi.model.Configure;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
public class ZookeeperPluginTest
|
||||
{
|
||||
private Injector injector;
|
||||
private Configure configure;
|
||||
|
||||
@Before
|
||||
public void before()
|
||||
{
|
||||
injector = Guice.createInjector(new ZookeeperPluginModule());
|
||||
configure = new Configure();
|
||||
configure.setHost("localhost:2181");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test()
|
||||
{
|
||||
Set<Plugin> plugins = injector.getInstance(Key.get(new TypeLiteral<Set<Plugin>>() {}));
|
||||
Optional<Plugin> pluginOptional = plugins.stream()
|
||||
.filter(v -> v.name().equalsIgnoreCase("Zookeeper"))
|
||||
.findFirst();
|
||||
if (pluginOptional.isPresent()) {
|
||||
Plugin plugin = pluginOptional.get();
|
||||
plugin.connect(configure);
|
||||
Assert.assertNotNull(plugin.execute(plugin.validator()).getConnection());
|
||||
plugin.destroy();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package io.edurt.datacap.plugin.natived.zookeeper.sql;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import org.antlr.v4.runtime.CharStream;
|
||||
import org.antlr.v4.runtime.CharStreams;
|
||||
import org.antlr.v4.runtime.CommonTokenStream;
|
||||
import org.antlr.v4.runtime.atn.PredictionMode;
|
||||
import org.antlr.v4.runtime.tree.ParseTree;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class ZookeeperSqlParserTest
|
||||
{
|
||||
public ZookeeperSql getConfigure(String sql)
|
||||
{
|
||||
CharStream stream = CharStreams.fromString(sql);
|
||||
ZookeeperSqlLexer lexer = new ZookeeperSqlLexer(new ZookeeperCaseInsensitiveStream(stream));
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
||||
ZookeeperSqlParser parser = new ZookeeperSqlParser(tokens);
|
||||
parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
|
||||
parser.removeErrorListeners();
|
||||
|
||||
ParseTree tree = null;
|
||||
try {
|
||||
tree = parser.singleStatement();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Preconditions.checkArgument(false, "Not support this sql");
|
||||
}
|
||||
|
||||
ZookeeperSqlVisitor simpleSqlTreeVisitor = new ZookeeperSqlVisitor();
|
||||
if (ObjectUtils.isNotEmpty(tree)) {
|
||||
ZookeeperSql configure = simpleSqlTreeVisitor.visit(tree);
|
||||
return configure;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelect()
|
||||
{
|
||||
String sql = "SELECT * FROM test.dd.dd";
|
||||
ZookeeperSql configure = getConfigure(sql);
|
||||
Assert.assertEquals(configure.getToken(), ZookeeperSqlToken.SELECT);
|
||||
Assert.assertTrue(configure.getColumns().size() > 0);
|
||||
Assert.assertNotNull(configure.getTable());
|
||||
|
||||
sql = "Select * FROM test.dd.dd";
|
||||
configure = getConfigure(sql);
|
||||
Assert.assertNotNull(configure.getTable());
|
||||
}
|
||||
}
|
@ -259,6 +259,11 @@
|
||||
<artifactId>datacap-plugin-jdbc-ydb</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.edurt.datacap.plugin.natived</groupId>
|
||||
<artifactId>datacap-plugin-native-zookeeper</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
19
server/src/main/etc/conf/plugins/native/zookeeper.json
Normal file
19
server/src/main/etc/conf/plugins/native/zookeeper.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "Zookeeper",
|
||||
"supportTime": "2023-02-07",
|
||||
"configures": [
|
||||
{
|
||||
"field": "name",
|
||||
"type": "String",
|
||||
"required": true,
|
||||
"message": "name is a required field, please be sure to enter"
|
||||
},
|
||||
{
|
||||
"field": "host",
|
||||
"type": "String",
|
||||
"required": true,
|
||||
"value": "127.0.0.1:2181",
|
||||
"message": "host is a required field, please be sure to enter"
|
||||
}
|
||||
]
|
||||
}
|
BIN
web/console-fe/public/static/images/plugin/Zookeeper.png
Normal file
BIN
web/console-fe/public/static/images/plugin/Zookeeper.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.7 KiB |
@ -6,5 +6,5 @@ export class Sql
|
||||
table: string;
|
||||
limit = 10;
|
||||
offset = 0;
|
||||
sort: Sort;
|
||||
sort: Array<Sort>;
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ import TemplateSqlService from "@/services/template/TemplateSqlService";
|
||||
import {SqlBody} from "@/model/template/SqlBody";
|
||||
import {ExecuteService} from "@/services/ExecuteService";
|
||||
import {Sql} from "@/model/sql/Sql";
|
||||
import squel from "squel";
|
||||
import {ExecuteDslBodyBuilder} from "@/model/ExecuteDslBody";
|
||||
import {SqlBodyBuilder} from "@/model/builder/SqlBody";
|
||||
import {SqlType} from "@/model/builder/SqlType";
|
||||
@ -67,7 +66,9 @@ class ManagerService
|
||||
|
||||
const orders: SqlColumn[] = new Array();
|
||||
if (sql.sort) {
|
||||
orders.push(new SqlColumnBuilder(sql.sort.column).setOrder(SqlOrder[sql.sort.sort]).build());
|
||||
sql.sort.forEach(order => {
|
||||
orders.push(new SqlColumnBuilder(order.column).setOrder(SqlOrder[order.sort]).build());
|
||||
});
|
||||
}
|
||||
|
||||
const sqlBody = new SqlBodyBuilder(sql.database, sql.table)
|
||||
@ -82,22 +83,6 @@ class ManagerService
|
||||
.build();
|
||||
return new ExecuteService().executeDsl(configure);
|
||||
}
|
||||
|
||||
private builderSql(configure: Sql): string
|
||||
{
|
||||
const sql = squel.select();
|
||||
sql.from(configure.database + '.' + configure.table);
|
||||
sql.limit(configure.limit).offset(configure.offset);
|
||||
if (configure.sort) {
|
||||
if (configure.sort.sort === 'ASC') {
|
||||
sql.order(configure.sort.column, true);
|
||||
}
|
||||
else {
|
||||
sql.order(configure.sort.column, false);
|
||||
}
|
||||
}
|
||||
return sql.toString();
|
||||
}
|
||||
}
|
||||
|
||||
export default new ManagerService();
|
||||
|
@ -1,28 +1,34 @@
|
||||
<template>
|
||||
<div>
|
||||
<Alert>
|
||||
<Form :model="formInline" inline>
|
||||
<FormItem :label="$t('common.column')" prop="column">
|
||||
<Select v-model="formInline.column" size="small" style="min-width: 200px;">
|
||||
<Option v-for="column in columns" :value="column.title" v-bind:key="column.title">{{ column.title }}</Option>
|
||||
</Select>
|
||||
</FormItem>
|
||||
<FormItem :label="$t('common.sort')" prop="sort">
|
||||
<Select v-model="formInline.sort" size="small" style="min-width: 150px;">
|
||||
<Option value="ASC">{{ $t('common.asc') }}</Option>
|
||||
<Option value="DESC">{{ $t('common.desc') }}</Option>
|
||||
</Select>
|
||||
</FormItem>
|
||||
<FormItem label=" ">
|
||||
<Button :disabled="!(formInline.column && formInline.sort)" size="small" type="primary" @click="handleApply('formInline')">{{ $t('common.apply') }}</Button>
|
||||
<Form inline>
|
||||
<div v-for="(item, index) in sortColumnItems" v-bind:key="index">
|
||||
<FormItem :label="$t('common.column')" prop="column">
|
||||
<Select v-model="item.column" size="small" style="min-width: 200px;">
|
||||
<Option v-for="column in columns" :value="column.title" v-bind:key="column.title">{{ column.title }}</Option>
|
||||
</Select>
|
||||
</FormItem>
|
||||
<FormItem :label="$t('common.sort')" prop="sort">
|
||||
<Select v-model="item.sort" size="small" style="min-width: 150px;">
|
||||
<Option value="ASC">{{ $t('common.asc') }}</Option>
|
||||
<Option value="DESC">{{ $t('common.desc') }}</Option>
|
||||
</Select>
|
||||
</FormItem>
|
||||
<FormItem prop="action">
|
||||
<template #label>
|
||||
<Button @click="handlePlusItem(index)" type="primary" icon="md-add" size="small"/>
|
||||
<Button :disabled="sortColumnItems.length===1" @click="handleRemoveItem(index)" type="error" icon="md-remove" size="small"/>
|
||||
</template>
|
||||
</FormItem>
|
||||
</div>
|
||||
<FormItem>
|
||||
<Button :disabled="sortColumnItems.length === 0" size="small" type="primary" @click="handleApply('formInline')">{{ $t('common.apply') }}</Button>
|
||||
</FormItem>
|
||||
</Form>
|
||||
</Alert>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {Sort} from "@/model/sql/Sort";
|
||||
|
||||
export default {
|
||||
name: 'SortByComponent',
|
||||
props: {
|
||||
@ -33,15 +39,25 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
formInline: {
|
||||
column: null,
|
||||
sort: null
|
||||
}
|
||||
index: 0,
|
||||
sortColumnItems: [
|
||||
{
|
||||
column: null,
|
||||
sort: null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handlePlusItem() {
|
||||
this.index++;
|
||||
this.sortColumnItems.push({column: null, sort: null});
|
||||
},
|
||||
handleRemoveItem() {
|
||||
this.sortColumnItems.pop(this.index);
|
||||
},
|
||||
handleApply() {
|
||||
this.$emit('getValue', this.formInline);
|
||||
this.$emit('getValue', this.sortColumnItems);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user