mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2025-02-25 18:55:28 -06:00
merge main into http_finish and fixup conflicts and http APIs
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
package io.nosqlbench.docsys.api;
|
||||
|
||||
import io.nosqlbench.docsys.core.DocsysMarkdownEndpoint;
|
||||
import io.nosqlbench.docsys.endpoints.DocsysMarkdownEndpoint;
|
||||
|
||||
/**
|
||||
* At runtime, any instances of this service will be used to find
|
||||
|
||||
@@ -4,11 +4,21 @@ package io.nosqlbench.docsys.api;
|
||||
* Any class which is annotated with <pre>{@code @Service(WebServiceObject.class)}</pre>
|
||||
* will be found and loaded as a service.
|
||||
*
|
||||
* For the methods used to configure these objects, consult
|
||||
* <A href="https://eclipse-ee4j.github.io/jersey.github.io/documentation/latest/jaxrs-resources.html#d0e2040">jax-rs resources documentation</A>
|
||||
* For the methods used to configure these objects, consult the
|
||||
* references below:
|
||||
*
|
||||
* and
|
||||
* <A href="https://jax-rs.github.io/apidocs/2.1/">Jax-RS API Docs</A>
|
||||
* @see <A href="https://eclipse-ee4j.github.io/jersey.github
|
||||
* .io/documentation/latest/jaxrs-resources.html#d0e2040">Jersey jax-rs
|
||||
* resources documentation</A>
|
||||
*
|
||||
* @see <A href="https://repo1.maven.org/maven2/org/glassfish/jersey/jersey-documentation/2.5
|
||||
* .1/jersey-documentation-2.5.1-user-guide.pdf">Jersey 2.5.1 user guide</a>
|
||||
*
|
||||
* @see <A href="https://github.com/jax-rs/spec/blob/master/spec
|
||||
* .pdf">JAX-RS: Java™ API for RESTful Web Services Version 2.1
|
||||
* Proposed Final Draft June 9, 2017</A>
|
||||
**
|
||||
* @see <A href="https://jax-rs.github.io/apidocs/2.1/">Jax-RS API Docs</A>
|
||||
*/
|
||||
public interface WebServiceObject {
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.nosqlbench.docsys.core;
|
||||
|
||||
import io.nosqlbench.docsys.endpoints.DocsysMarkdownEndpoint;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -11,8 +12,7 @@ import java.nio.file.StandardOpenOption;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class DocServerApp {
|
||||
public final static String APPNAME_DOCSERVER = "docserver";
|
||||
private static Logger logger = LogManager.getLogger(DocServerApp.class);
|
||||
private static final Logger logger = LogManager.getLogger(DocServerApp.class);
|
||||
|
||||
// static {
|
||||
// // defer to an extant logger context if it is there, otherwise
|
||||
@@ -78,36 +78,19 @@ public class DocServerApp {
|
||||
String[] markdownFileArray = markdownList.split("\n");
|
||||
|
||||
for (String markdownFile : markdownFileArray) {
|
||||
Path relativePath = dirpath.resolve(Path.of("services/docs/markdown", markdownFile));
|
||||
Path relativePath = dirpath.resolve(Path.of("services/docs", markdownFile));
|
||||
logger.info("Creating " + relativePath.toString());
|
||||
|
||||
String markdown = dds.getFileByPath(markdownFile);
|
||||
Path path = dds.findPath(markdownFile);
|
||||
// String markdown = dds.getFileByPath(markdownFile);
|
||||
// Files.writeString(relativePath, markdown, OVERWRITE);
|
||||
Files.createDirectories(relativePath.getParent());
|
||||
Files.writeString(relativePath, markdown, OVERWRITE);
|
||||
Files.write(relativePath,Files.readAllBytes(path),OVERWRITE);
|
||||
}
|
||||
}
|
||||
|
||||
// private static void configureDocServerLogging(LoggerContext context) {
|
||||
// JoranConfigurator jc = new JoranConfigurator();
|
||||
// jc.setContext(context);
|
||||
// context.reset();
|
||||
// context.putProperty("application-name", APPNAME_DOCSERVER);
|
||||
// InputStream is = DocServerApp.class.getClassLoader().getResourceAsStream("logback-docsys.xml");
|
||||
// if (is != null) {
|
||||
// try {
|
||||
// jc.doConfigure(is);
|
||||
// } catch (JoranException e) {
|
||||
// System.err.println("error initializing logging system: " + e.getMessage());
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
// } else {
|
||||
// throw new RuntimeException("No logging context was provided, and " +
|
||||
// "logback-docsys.xml could not be loaded from the classpath.");
|
||||
// }
|
||||
// }
|
||||
|
||||
private static void runServer(String[] serverArgs) {
|
||||
DocServer server = new DocServer();
|
||||
NBWebServer server = new NBWebServer();
|
||||
for (int i = 0; i < serverArgs.length; i++) {
|
||||
String arg = serverArgs[i];
|
||||
if (arg.matches(".*://.*")) {
|
||||
@@ -122,7 +105,21 @@ public class DocServerApp {
|
||||
} else if (arg.matches("\\d+")) {
|
||||
server.withPort(Integer.parseInt(arg));
|
||||
} else if (arg.matches("--public")) {
|
||||
server.withHost("0.0.0.0");
|
||||
int nextidx = i+1;
|
||||
String net_addr = "0.0.0.0";
|
||||
if (
|
||||
serverArgs.length>nextidx+1 &&
|
||||
serverArgs[nextidx].matches("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")
|
||||
) {
|
||||
i++;
|
||||
net_addr = serverArgs[nextidx];
|
||||
}
|
||||
logger.info("running public server on interface with address " + net_addr);
|
||||
server.withHost(net_addr);
|
||||
} else if (arg.matches("--workspaces")) {
|
||||
String workspaces_root = serverArgs[i + 1];
|
||||
logger.info("Setting workspace directory to workspace_dir");
|
||||
server.withContextParam("workspaces_root", workspaces_root);
|
||||
}
|
||||
}
|
||||
//
|
||||
@@ -131,14 +128,14 @@ public class DocServerApp {
|
||||
|
||||
private static void showHelp(String... helpArgs) {
|
||||
System.out.println(
|
||||
"Usage: " + APPNAME_DOCSERVER + " " +
|
||||
" [url] " +
|
||||
" [path]... " + "\n" +
|
||||
"\n" +
|
||||
"If [url] is provided, then the scheme, address and port are all taken from it.\n" +
|
||||
"Any additional paths are served from the filesystem, in addition to the internal ones.\n" +
|
||||
"\n" +
|
||||
"For now, only http:// is supported."
|
||||
"Usage: appserver " +
|
||||
" [url] " +
|
||||
" [path]... " + "\n" +
|
||||
"\n" +
|
||||
"If [url] is provided, then the scheme, address and port are all taken from it.\n" +
|
||||
"Any additional paths are served from the filesystem, in addition to the internal ones.\n" +
|
||||
"\n" +
|
||||
"For now, only http:// is supported."
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -41,9 +41,9 @@ import java.util.stream.Collectors;
|
||||
/**
|
||||
* For examples, see <a href="https://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/examples/embedded/src/main/java/org/eclipse/jetty/embedded/">embedded examples</a>
|
||||
*/
|
||||
public class DocServer implements Runnable {
|
||||
public class NBWebServer implements Runnable {
|
||||
|
||||
private final static Logger logger = LogManager.getLogger(DocServer.class);
|
||||
private final static Logger logger = LogManager.getLogger(NBWebServer.class);
|
||||
|
||||
private final List<Path> basePaths = new ArrayList<>();
|
||||
private final List<Class> servletClasses = new ArrayList<>();
|
||||
@@ -55,17 +55,29 @@ public class DocServer implements Runnable {
|
||||
private String bindHost = "localhost";
|
||||
private int bindPort = 12345;
|
||||
|
||||
public DocServer withHost(String bindHost) {
|
||||
private final Map<String,Object> contextParams = new LinkedHashMap<>();
|
||||
|
||||
public NBWebServer withContextParams(Map<String,Object> cp) {
|
||||
this.contextParams.putAll(cp);
|
||||
return this;
|
||||
}
|
||||
|
||||
public NBWebServer withContextParam(String name, Object object) {
|
||||
this.contextParams.put(name, object);
|
||||
return this;
|
||||
}
|
||||
|
||||
public NBWebServer withHost(String bindHost) {
|
||||
this.bindHost = bindHost;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DocServer withPort(int bindPort) {
|
||||
public NBWebServer withPort(int bindPort) {
|
||||
this.bindPort = bindPort;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DocServer withURL(String urlSpec) {
|
||||
public NBWebServer withURL(String urlSpec) {
|
||||
try {
|
||||
URL url = new URL(urlSpec);
|
||||
this.bindPort = url.getPort();
|
||||
@@ -81,7 +93,7 @@ public class DocServer implements Runnable {
|
||||
return this;
|
||||
}
|
||||
|
||||
public DocServer withScheme(String scheme) {
|
||||
public NBWebServer withScheme(String scheme) {
|
||||
this.bindScheme = scheme;
|
||||
return this;
|
||||
}
|
||||
@@ -129,7 +141,7 @@ public class DocServer implements Runnable {
|
||||
return servletHolder;
|
||||
}
|
||||
|
||||
public DocServer addPaths(Path... paths) {
|
||||
public NBWebServer addPaths(Path... paths) {
|
||||
for (Path path : paths) {
|
||||
try {
|
||||
path.getFileSystem().provider().checkAccess(path, AccessMode.READ);
|
||||
@@ -216,6 +228,7 @@ public class DocServer implements Runnable {
|
||||
|
||||
|
||||
ResourceConfig rc = new ResourceConfig();
|
||||
rc.addProperties(contextParams);
|
||||
rc.property("server", this);
|
||||
|
||||
ServletContainer container = new ServletContainer(rc);
|
||||
@@ -305,7 +318,7 @@ public class DocServer implements Runnable {
|
||||
|
||||
server.join();
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
logger.error("error while starting doc server", e);
|
||||
e.printStackTrace(System.out);
|
||||
System.exit(2);
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.nosqlbench.docsys.core;
|
||||
package io.nosqlbench.docsys.endpoints;
|
||||
|
||||
import io.nosqlbench.docsys.core.NBWebServer;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import io.nosqlbench.docsys.api.WebServiceObject;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@@ -17,6 +18,7 @@ import javax.ws.rs.core.MediaType;
|
||||
@Singleton
|
||||
@Path("_")
|
||||
public class DocServerStatusEndpoint implements WebServiceObject {
|
||||
|
||||
private final static Logger logger =
|
||||
LogManager.getLogger(DocServerStatusEndpoint.class);
|
||||
|
||||
@@ -26,10 +28,10 @@ public class DocServerStatusEndpoint implements WebServiceObject {
|
||||
private String name;
|
||||
|
||||
@GET
|
||||
@Path("stats")
|
||||
@Path("status")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String getStats() {
|
||||
DocServer s = (DocServer) config.getProperty("server");
|
||||
NBWebServer s = (NBWebServer) config.getProperty("server");
|
||||
return s.toString();
|
||||
}
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
package io.nosqlbench.docsys.core;
|
||||
package io.nosqlbench.docsys.endpoints;
|
||||
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import io.nosqlbench.docsys.api.DocsNameSpace;
|
||||
import io.nosqlbench.docsys.api.Docs;
|
||||
import io.nosqlbench.docsys.api.DocsBinder;
|
||||
import io.nosqlbench.docsys.api.DocsNameSpace;
|
||||
import io.nosqlbench.docsys.api.WebServiceObject;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import io.nosqlbench.docsys.core.DocsysPathLoader;
|
||||
import io.nosqlbench.docsys.core.PathWalker;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.io.IOException;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.net.URLDecoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
@@ -27,7 +29,7 @@ public class DocsysMarkdownEndpoint implements WebServiceObject {
|
||||
private DocsBinder enabled;
|
||||
private DocsBinder disabled;
|
||||
|
||||
private AtomicLong version = new AtomicLong(System.nanoTime());
|
||||
private final AtomicLong version = new AtomicLong(System.nanoTime());
|
||||
private final Set<String> enables = new HashSet<>();
|
||||
|
||||
@GET
|
||||
@@ -126,25 +128,51 @@ public class DocsysMarkdownEndpoint implements WebServiceObject {
|
||||
return list;
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("file")
|
||||
@Produces(MediaType.TEXT_PLAIN)
|
||||
public String getFileByPath(@QueryParam("path") String pathspec) {
|
||||
return getFile(pathspec);
|
||||
}
|
||||
|
||||
// @GET
|
||||
// @Path("file")
|
||||
// @Produces(MediaType.TEXT_PLAIN)
|
||||
// public String getFileByPath(@QueryParam("path") String pathspec) {
|
||||
// return getFile(pathspec);
|
||||
// }
|
||||
//
|
||||
/**
|
||||
* @param pathspec the path as known to the manifest
|
||||
* @return The contents of a file
|
||||
*/
|
||||
@GET
|
||||
@Produces(MediaType.TEXT_PLAIN)
|
||||
@Path(value = "markdown/{pathspec:.*}")
|
||||
public String getFileInPath(@PathParam("pathspec") String pathspec) {
|
||||
return getFile(pathspec);
|
||||
@Path(value = "{pathspec:.*}")
|
||||
public Response getFileInPath(@PathParam("pathspec") String pathspec) {
|
||||
try {
|
||||
java.nio.file.Path path = findPath(pathspec);
|
||||
String contentType = Files.probeContentType(path);
|
||||
MediaType mediaType = MediaType.valueOf(contentType);
|
||||
|
||||
return Response.ok(path.toFile(),mediaType).build();
|
||||
} catch (Exception e) {
|
||||
return Response.serverError().entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
private String getFile(String pathspec) {
|
||||
// private String getFile(String pathspec) {
|
||||
// pathspec = URLDecoder.decode(pathspec, StandardCharsets.UTF_8);
|
||||
// for (java.nio.file.Path path : enabled.getPaths()) {
|
||||
// java.nio.file.Path resolved = path.resolve(pathspec);
|
||||
// if (Files.isDirectory(resolved)) {
|
||||
// throw new RuntimeException("Path is a directory: '" + pathspec + "'");
|
||||
// }
|
||||
// if (Files.exists(resolved)) {
|
||||
// try {
|
||||
// String content = Files.readString(resolved, StandardCharsets.UTF_8);
|
||||
// return content;
|
||||
// } catch (IOException e) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// throw new RuntimeException("Unable to find any valid file at '" + pathspec + "'");
|
||||
// }
|
||||
|
||||
public java.nio.file.Path findPath(String pathspec) {
|
||||
pathspec = URLDecoder.decode(pathspec, StandardCharsets.UTF_8);
|
||||
for (java.nio.file.Path path : enabled.getPaths()) {
|
||||
java.nio.file.Path resolved = path.resolve(pathspec);
|
||||
@@ -152,15 +180,11 @@ public class DocsysMarkdownEndpoint implements WebServiceObject {
|
||||
throw new RuntimeException("Path is a directory: '" + pathspec + "'");
|
||||
}
|
||||
if (Files.exists(resolved)) {
|
||||
try {
|
||||
String content = Files.readString(resolved, StandardCharsets.UTF_8);
|
||||
return content;
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return resolved;
|
||||
}
|
||||
}
|
||||
throw new RuntimeException("Unable to find any valid file at '" + pathspec + "'");
|
||||
|
||||
}
|
||||
|
||||
private void init(boolean reload) {
|
||||
1
docsys/src/main/node/docsys/.gitignore
vendored
1
docsys/src/main/node/docsys/.gitignore
vendored
@@ -2,5 +2,6 @@ local/**
|
||||
node_modules
|
||||
npm-debug.log
|
||||
.nuxt
|
||||
_nuxt/**
|
||||
dist
|
||||
.idea
|
||||
|
||||
479
docsys/src/main/node/docsys/antlr/CQL3.g4
Normal file
479
docsys/src/main/node/docsys/antlr/CQL3.g4
Normal file
@@ -0,0 +1,479 @@
|
||||
grammar CQL3;
|
||||
|
||||
|
||||
// workaround for:
|
||||
// https://github.com/antlr/antlr4/issues/118
|
||||
//random_wrapper
|
||||
// : statements EOF
|
||||
// ;
|
||||
|
||||
statements
|
||||
: statement ( ';'+ statement )* ';'+
|
||||
;
|
||||
|
||||
statement
|
||||
: drop_keyspace_stmt
|
||||
| create_keyspace_stmt
|
||||
| alter_keyspace_stmt
|
||||
| use_stmt
|
||||
| create_table_stmt
|
||||
| alter_table_stmt
|
||||
| drop_table_stmt
|
||||
| truncate_table_stmt
|
||||
| create_index_stmt
|
||||
| drop_index_stmt
|
||||
| insert_stmt
|
||||
| update_stmt
|
||||
| delete_stmt
|
||||
| batch_stmt
|
||||
;
|
||||
|
||||
dml_statements
|
||||
: dml_statement (';'+ dml_statement)* ';'+
|
||||
;
|
||||
|
||||
dml_statement
|
||||
: insert_stmt
|
||||
| update_stmt
|
||||
| delete_stmt
|
||||
;
|
||||
|
||||
create_keyspace_stmt
|
||||
: K_CREATE K_KEYSPACE if_not_exists? keyspace_name K_WITH properties
|
||||
;
|
||||
|
||||
alter_keyspace_stmt
|
||||
: K_ALTER K_KEYSPACE keyspace_name K_WITH properties
|
||||
;
|
||||
|
||||
drop_keyspace_stmt
|
||||
: K_DROP K_KEYSPACE if_exists? keyspace_name
|
||||
;
|
||||
|
||||
use_stmt
|
||||
: K_USE keyspace_name
|
||||
;
|
||||
|
||||
create_table_stmt
|
||||
: K_CREATE (K_TABLE | K_COLUMNFAMILY) if_not_exists? table_name column_definitions (K_WITH table_options)?
|
||||
;
|
||||
|
||||
alter_table_stmt
|
||||
: K_ALTER (K_TABLE | K_COLUMNFAMILY) table_name alter_table_instruction
|
||||
;
|
||||
|
||||
alter_table_instruction
|
||||
: K_ALTER column_name K_TYPE column_type
|
||||
| K_ADD column_name column_type
|
||||
| K_DROP column_name
|
||||
| K_WITH table_options
|
||||
;
|
||||
|
||||
drop_table_stmt
|
||||
: K_DROP K_TABLE if_exists? table_name
|
||||
;
|
||||
|
||||
truncate_table_stmt
|
||||
: K_TRUNCATE table_name
|
||||
;
|
||||
|
||||
create_index_stmt
|
||||
: K_CREATE (K_CUSTOM)? K_INDEX if_not_exists? index_name? K_ON table_name '(' column_name ')'
|
||||
(K_USING index_class (K_WITH index_options)?)?
|
||||
;
|
||||
|
||||
drop_index_stmt
|
||||
: K_DROP K_INDEX if_exists? index_name
|
||||
;
|
||||
|
||||
insert_stmt
|
||||
: K_INSERT K_INTO table_name column_names K_VALUES column_values if_not_exists? upsert_options?
|
||||
;
|
||||
|
||||
column_names
|
||||
: '(' column_name (',' column_name)* ')'
|
||||
;
|
||||
|
||||
column_values
|
||||
: '(' term (',' term)* ')'
|
||||
;
|
||||
|
||||
upsert_options
|
||||
: K_USING upsert_option (K_AND upsert_option)*
|
||||
;
|
||||
|
||||
upsert_option
|
||||
: K_TIMESTAMP INTEGER
|
||||
| K_TTL INTEGER
|
||||
;
|
||||
|
||||
index_name
|
||||
: IDENTIFIER
|
||||
;
|
||||
|
||||
index_class
|
||||
: STRING
|
||||
;
|
||||
|
||||
index_options
|
||||
: K_OPTIONS '=' map
|
||||
;
|
||||
|
||||
update_stmt
|
||||
: K_UPDATE table_name upsert_options? K_SET update_assignments K_WHERE where_clause update_conditions?
|
||||
;
|
||||
|
||||
update_assignments
|
||||
: update_assignment (',' update_assignment)*
|
||||
;
|
||||
|
||||
update_assignment
|
||||
: column_name '=' term
|
||||
| column_name '=' column_name ('+' | '-') (INTEGER | set | list)
|
||||
| column_name '=' column_name '+' map
|
||||
| column_name '[' term ']' '=' term
|
||||
;
|
||||
|
||||
update_conditions
|
||||
: K_IF update_condition (K_AND update_condition)*
|
||||
;
|
||||
|
||||
update_condition
|
||||
: IDENTIFIER '=' term
|
||||
| IDENTIFIER '[' term ']' '=' term
|
||||
;
|
||||
|
||||
where_clause
|
||||
: relation (K_AND relation)*
|
||||
;
|
||||
|
||||
relation
|
||||
: column_name '=' term
|
||||
| column_name K_IN '(' (term (',' term)*)? ')'
|
||||
| column_name K_IN '?'
|
||||
;
|
||||
|
||||
delete_stmt
|
||||
: K_DELETE delete_selections? K_FROM table_name
|
||||
(K_USING K_TIMESTAMP INTEGER)?
|
||||
K_WHERE where_clause
|
||||
delete_conditions?
|
||||
;
|
||||
|
||||
delete_conditions
|
||||
: K_IF ( K_EXISTS
|
||||
| (delete_condition (K_AND delete_condition)*))
|
||||
;
|
||||
|
||||
delete_condition
|
||||
: IDENTIFIER ('[' term ']')? '=' term
|
||||
;
|
||||
|
||||
delete_selections
|
||||
: delete_selection (',' delete_selection)*
|
||||
;
|
||||
|
||||
delete_selection
|
||||
: IDENTIFIER ('[' term ']')?
|
||||
;
|
||||
|
||||
batch_stmt
|
||||
: K_BEGIN (K_UNLOGGED | K_COUNTER)? K_BATCH batch_options? dml_statements K_APPLY K_BATCH
|
||||
;
|
||||
|
||||
batch_options
|
||||
: K_USING batch_option (K_AND batch_option)*
|
||||
;
|
||||
|
||||
batch_option
|
||||
: K_TIMESTAMP INTEGER
|
||||
;
|
||||
|
||||
table_name
|
||||
: (keyspace_name '.')? table_name_noks
|
||||
;
|
||||
|
||||
table_name_noks
|
||||
: IDENTIFIER
|
||||
;
|
||||
|
||||
column_name
|
||||
: IDENTIFIER
|
||||
;
|
||||
|
||||
table_options
|
||||
: table_option (K_AND table_option)*
|
||||
;
|
||||
|
||||
table_option
|
||||
: property
|
||||
| K_COMPACT K_STORAGE
|
||||
| K_CLUSTERING K_ORDER K_BY IDENTIFIER
|
||||
| K_CLUSTERING K_ORDER K_BY '('IDENTIFIER asc_or_desc')'
|
||||
;
|
||||
|
||||
asc_or_desc
|
||||
: K_ASC
|
||||
| K_DESC
|
||||
;
|
||||
|
||||
column_definitions
|
||||
: '(' column_definition (',' column_definition)* ')'
|
||||
;
|
||||
|
||||
column_definition
|
||||
: column_name column_type (K_STATIC)? (K_PRIMARY K_KEY)?
|
||||
| K_PRIMARY K_KEY primary_key
|
||||
;
|
||||
|
||||
column_type
|
||||
: data_type
|
||||
;
|
||||
|
||||
primary_key
|
||||
: '(' partition_key (',' clustering_column)* ')'
|
||||
;
|
||||
|
||||
partition_key
|
||||
: column_name
|
||||
| '(' column_name (',' column_name)* ')'
|
||||
;
|
||||
|
||||
clustering_column
|
||||
: column_name
|
||||
;
|
||||
|
||||
keyspace_name
|
||||
: IDENTIFIER
|
||||
;
|
||||
|
||||
if_not_exists
|
||||
: K_IF K_NOT K_EXISTS
|
||||
;
|
||||
|
||||
if_exists
|
||||
: K_IF K_EXISTS
|
||||
;
|
||||
|
||||
constant
|
||||
: STRING
|
||||
| INTEGER
|
||||
| FLOAT
|
||||
| bool
|
||||
| UUID
|
||||
| BLOB
|
||||
;
|
||||
|
||||
variable
|
||||
: '?'
|
||||
| ':' IDENTIFIER
|
||||
;
|
||||
|
||||
term
|
||||
: constant
|
||||
| collection
|
||||
| variable
|
||||
| function
|
||||
;
|
||||
|
||||
collection
|
||||
: map
|
||||
| set
|
||||
| list
|
||||
;
|
||||
|
||||
map
|
||||
: '{' (term ':' term (',' term ':' term)*)? '}'
|
||||
;
|
||||
|
||||
set
|
||||
: '{' (term (',' term)*)? '}'
|
||||
;
|
||||
|
||||
list
|
||||
: '[' (term (',' term)*)? ']'
|
||||
;
|
||||
|
||||
function
|
||||
: IDENTIFIER '(' (term (',' term)*)? ')'
|
||||
;
|
||||
|
||||
properties
|
||||
: property (K_AND property)*
|
||||
;
|
||||
|
||||
property
|
||||
: property_name '=' property_value
|
||||
;
|
||||
|
||||
property_name
|
||||
: IDENTIFIER
|
||||
;
|
||||
|
||||
property_value
|
||||
: IDENTIFIER
|
||||
| constant
|
||||
| map
|
||||
;
|
||||
|
||||
data_type
|
||||
: native_type
|
||||
| collection_type
|
||||
| STRING
|
||||
;
|
||||
|
||||
native_type
|
||||
: 'ascii'
|
||||
| 'bigint'
|
||||
| 'blob'
|
||||
| 'boolean'
|
||||
| 'counter'
|
||||
| 'decimal'
|
||||
| 'double'
|
||||
| 'float'
|
||||
| 'inet'
|
||||
| 'int'
|
||||
| 'text'
|
||||
| 'tinyint'
|
||||
| 'timestamp'
|
||||
| 'timeuuid'
|
||||
| 'uuid'
|
||||
| 'varchar'
|
||||
| 'varint'
|
||||
;
|
||||
|
||||
collection_type
|
||||
: 'list' '<' native_type '>'
|
||||
| 'set' '<' native_type '>'
|
||||
| 'map' '<' native_type ',' native_type '>'
|
||||
;
|
||||
|
||||
|
||||
bool
|
||||
: K_TRUE
|
||||
| K_FALSE
|
||||
;
|
||||
|
||||
|
||||
K_ADD: A D D;
|
||||
K_ALTER: A L T E R;
|
||||
K_AND: A N D;
|
||||
K_APPLY: A P P L Y;
|
||||
K_BATCH: B A T C H;
|
||||
K_BEGIN: B E G I N;
|
||||
K_CLUSTERING: C L U S T E R I N G;
|
||||
K_ASC: A S C;
|
||||
K_DESC: D E S C;
|
||||
K_COLUMNFAMILY: C O L U M N F A M I L Y;
|
||||
K_COMPACT: C O M P A C T;
|
||||
K_COUNTER: C O U N T E R;
|
||||
K_CREATE: C R E A T E;
|
||||
K_CUSTOM: C U S T O M;
|
||||
K_DELETE: D E L E T E;
|
||||
K_DROP: D R O P;
|
||||
K_EXISTS: E X I S T S;
|
||||
K_FALSE: F A L S E;
|
||||
K_FROM: F R O M;
|
||||
K_IF: I F;
|
||||
K_IN: I N;
|
||||
K_INDEX: I N D E X;
|
||||
K_INSERT: I N S E R T;
|
||||
K_INTO: I N T O;
|
||||
K_KEY: K E Y;
|
||||
K_KEYSPACE: K E Y S P A C E;
|
||||
K_NOT: N O T;
|
||||
K_ON: O N;
|
||||
K_OPTIONS: O P T I O N S;
|
||||
K_ORDER: O R D E R;
|
||||
K_BY: B Y;
|
||||
K_PRIMARY: P R I M A R Y;
|
||||
K_SELECT: S E L E C T;
|
||||
K_SET: S E T;
|
||||
K_STATIC: S T A T I C;
|
||||
K_STORAGE: S T O R A G E;
|
||||
K_TABLE: T A B L E;
|
||||
K_TIMESTAMP: T I M E S T A M P;
|
||||
K_TRUE: T R U E;
|
||||
K_TRUNCATE: T R U N C A T E;
|
||||
K_TTL: T T L;
|
||||
K_TYPE: T Y P E;
|
||||
K_UNLOGGED: U N L O G G E D;
|
||||
K_UPDATE: U P D A T E;
|
||||
K_USE: U S E;
|
||||
K_USING: U S I N G;
|
||||
K_VALUES: V A L U E S;
|
||||
K_WHERE: W H E R E;
|
||||
K_WITH: W I T H;
|
||||
|
||||
|
||||
|
||||
|
||||
IDENTIFIER
|
||||
: [a-zA-Z0-9_] [a-zA-Z0-9_]*
|
||||
;
|
||||
|
||||
|
||||
STRING
|
||||
: '\'' IDENTIFIER '\''
|
||||
;
|
||||
|
||||
INTEGER
|
||||
: '-'? DIGIT+
|
||||
;
|
||||
|
||||
FLOAT
|
||||
: '-'? DIGIT+ ( '.' DIGIT* )? ( E [+-]? DIGIT+ )?
|
||||
| 'NaN'
|
||||
| 'Infinity'
|
||||
;
|
||||
|
||||
UUID
|
||||
: HEX HEX HEX HEX HEX HEX HEX HEX '-' HEX HEX HEX HEX '-' HEX HEX HEX HEX '-' HEX HEX HEX HEX '-' HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX
|
||||
;
|
||||
|
||||
|
||||
BLOB
|
||||
: '0' X (HEX)+
|
||||
;
|
||||
|
||||
|
||||
fragment HEX : [0-9a-fA-F];
|
||||
fragment DIGIT : [0-9];
|
||||
fragment A : [aA];
|
||||
fragment B : [bB];
|
||||
fragment C : [cC];
|
||||
fragment D : [dD];
|
||||
fragment E : [eE];
|
||||
fragment F : [fF];
|
||||
fragment G : [gG];
|
||||
fragment H : [hH];
|
||||
fragment I : [iI];
|
||||
fragment J : [jJ];
|
||||
fragment K : [kK];
|
||||
fragment L : [lL];
|
||||
fragment M : [mM];
|
||||
fragment N : [nN];
|
||||
fragment O : [oO];
|
||||
fragment P : [pP];
|
||||
fragment Q : [qQ];
|
||||
fragment R : [rR];
|
||||
fragment S : [sS];
|
||||
fragment T : [tT];
|
||||
fragment U : [uU];
|
||||
fragment V : [vV];
|
||||
fragment W : [wW];
|
||||
fragment X : [xX];
|
||||
fragment Y : [yY];
|
||||
fragment Z : [zZ];
|
||||
|
||||
SINGLE_LINE_COMMENT
|
||||
: ('--'|'//') ~[\r\n]* -> channel(HIDDEN)
|
||||
;
|
||||
|
||||
MULTILINE_COMMENT
|
||||
: '/*' .*? ( '*/' | EOF ) -> channel(HIDDEN)
|
||||
;
|
||||
|
||||
WS
|
||||
: [ \t\r\n] -> channel(HIDDEN)
|
||||
;
|
||||
130
docsys/src/main/node/docsys/antlr/CQL3.tokens
Normal file
130
docsys/src/main/node/docsys/antlr/CQL3.tokens
Normal file
@@ -0,0 +1,130 @@
|
||||
T__0=1
|
||||
T__1=2
|
||||
T__2=3
|
||||
T__3=4
|
||||
T__4=5
|
||||
T__5=6
|
||||
T__6=7
|
||||
T__7=8
|
||||
T__8=9
|
||||
T__9=10
|
||||
T__10=11
|
||||
T__11=12
|
||||
T__12=13
|
||||
T__13=14
|
||||
T__14=15
|
||||
T__15=16
|
||||
T__16=17
|
||||
T__17=18
|
||||
T__18=19
|
||||
T__19=20
|
||||
T__20=21
|
||||
T__21=22
|
||||
T__22=23
|
||||
T__23=24
|
||||
T__24=25
|
||||
T__25=26
|
||||
T__26=27
|
||||
T__27=28
|
||||
T__28=29
|
||||
T__29=30
|
||||
T__30=31
|
||||
T__31=32
|
||||
T__32=33
|
||||
T__33=34
|
||||
T__34=35
|
||||
T__35=36
|
||||
K_ADD=37
|
||||
K_ALTER=38
|
||||
K_AND=39
|
||||
K_APPLY=40
|
||||
K_BATCH=41
|
||||
K_BEGIN=42
|
||||
K_CLUSTERING=43
|
||||
K_ASC=44
|
||||
K_DESC=45
|
||||
K_COLUMNFAMILY=46
|
||||
K_COMPACT=47
|
||||
K_COUNTER=48
|
||||
K_CREATE=49
|
||||
K_CUSTOM=50
|
||||
K_DELETE=51
|
||||
K_DROP=52
|
||||
K_EXISTS=53
|
||||
K_FALSE=54
|
||||
K_FROM=55
|
||||
K_IF=56
|
||||
K_IN=57
|
||||
K_INDEX=58
|
||||
K_INSERT=59
|
||||
K_INTO=60
|
||||
K_KEY=61
|
||||
K_KEYSPACE=62
|
||||
K_NOT=63
|
||||
K_ON=64
|
||||
K_OPTIONS=65
|
||||
K_ORDER=66
|
||||
K_BY=67
|
||||
K_PRIMARY=68
|
||||
K_SELECT=69
|
||||
K_SET=70
|
||||
K_STATIC=71
|
||||
K_STORAGE=72
|
||||
K_TABLE=73
|
||||
K_TIMESTAMP=74
|
||||
K_TRUE=75
|
||||
K_TRUNCATE=76
|
||||
K_TTL=77
|
||||
K_TYPE=78
|
||||
K_UNLOGGED=79
|
||||
K_UPDATE=80
|
||||
K_USE=81
|
||||
K_USING=82
|
||||
K_VALUES=83
|
||||
K_WHERE=84
|
||||
K_WITH=85
|
||||
IDENTIFIER=86
|
||||
STRING=87
|
||||
INTEGER=88
|
||||
FLOAT=89
|
||||
UUID=90
|
||||
BLOB=91
|
||||
SINGLE_LINE_COMMENT=92
|
||||
MULTILINE_COMMENT=93
|
||||
WS=94
|
||||
';'=1
|
||||
'('=2
|
||||
')'=3
|
||||
','=4
|
||||
'='=5
|
||||
'+'=6
|
||||
'-'=7
|
||||
'['=8
|
||||
']'=9
|
||||
'?'=10
|
||||
'.'=11
|
||||
':'=12
|
||||
'{'=13
|
||||
'}'=14
|
||||
'ascii'=15
|
||||
'bigint'=16
|
||||
'blob'=17
|
||||
'boolean'=18
|
||||
'counter'=19
|
||||
'decimal'=20
|
||||
'double'=21
|
||||
'float'=22
|
||||
'inet'=23
|
||||
'int'=24
|
||||
'text'=25
|
||||
'tinyint'=26
|
||||
'timestamp'=27
|
||||
'timeuuid'=28
|
||||
'uuid'=29
|
||||
'varchar'=30
|
||||
'varint'=31
|
||||
'list'=32
|
||||
'<'=33
|
||||
'>'=34
|
||||
'set'=35
|
||||
'map'=36
|
||||
497
docsys/src/main/node/docsys/antlr/CQL3Lexer.js
Normal file
497
docsys/src/main/node/docsys/antlr/CQL3Lexer.js
Normal file
@@ -0,0 +1,497 @@
|
||||
// Generated from CQL3.g4 by ANTLR 4.5
|
||||
// jshint ignore: start
|
||||
var antlr4 = require('antlr4/index');
|
||||
|
||||
|
||||
var serializedATN = ["\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd",
|
||||
"\2`\u0389\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\4\b\t",
|
||||
"\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20",
|
||||
"\t\20\4\21\t\21\4\22\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4",
|
||||
"\27\t\27\4\30\t\30\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35",
|
||||
"\4\36\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'",
|
||||
"\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61",
|
||||
"\t\61\4\62\t\62\4\63\t\63\4\64\t\64\4\65\t\65\4\66\t\66\4\67\t\67\4",
|
||||
"8\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C",
|
||||
"\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\t",
|
||||
"N\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY",
|
||||
"\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4`\t`\4a\ta\4b\tb\4c\tc\4d\t",
|
||||
"d\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\tk\4l\tl\4m\tm\4n\tn\4o\to",
|
||||
"\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4w\tw\4x\tx\4y\ty\4z\tz\4",
|
||||
"{\t{\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t",
|
||||
"\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\20",
|
||||
"\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3",
|
||||
"\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24",
|
||||
"\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3",
|
||||
"\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30",
|
||||
"\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\33\3",
|
||||
"\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34",
|
||||
"\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\36\3",
|
||||
"\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3 ",
|
||||
"\3 \3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3#\3#\3$\3$\3$\3$\3%\3%\3%\3%\3",
|
||||
"&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3*",
|
||||
"\3*\3*\3*\3*\3*\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3",
|
||||
"-\3-\3-\3-\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3\60",
|
||||
"\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3",
|
||||
"\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63",
|
||||
"\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3",
|
||||
"\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67",
|
||||
"\38\38\38\38\38\39\39\39\3:\3:\3:\3;\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3",
|
||||
"<\3<\3=\3=\3=\3=\3=\3>\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3?\3?\3@\3@\3@",
|
||||
"\3@\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3D\3D\3D\3E\3",
|
||||
"E\3E\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3F\3G\3G\3G\3G\3H\3H\3H\3H\3H",
|
||||
"\3H\3H\3I\3I\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3",
|
||||
"K\3K\3K\3K\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3O",
|
||||
"\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3",
|
||||
"R\3R\3S\3S\3S\3S\3S\3S\3T\3T\3T\3T\3T\3T\3T\3U\3U\3U\3U\3U\3U\3V\3V",
|
||||
"\3V\3V\3V\3W\3W\7W\u02ca\nW\fW\16W\u02cd\13W\3X\3X\3X\3X\3Y\5Y\u02d4",
|
||||
"\nY\3Y\6Y\u02d7\nY\rY\16Y\u02d8\3Z\5Z\u02dc\nZ\3Z\6Z\u02df\nZ\rZ\16",
|
||||
"Z\u02e0\3Z\3Z\7Z\u02e5\nZ\fZ\16Z\u02e8\13Z\5Z\u02ea\nZ\3Z\3Z\5Z\u02ee",
|
||||
"\nZ\3Z\6Z\u02f1\nZ\rZ\16Z\u02f2\5Z\u02f5\nZ\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z",
|
||||
"\3Z\3Z\3Z\5Z\u0302\nZ\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3",
|
||||
"[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3\\",
|
||||
"\3\\\3\\\6\\\u032c\n\\\r\\\16\\\u032d\3]\3]\3^\3^\3_\3_\3`\3`\3a\3a",
|
||||
"\3b\3b\3c\3c\3d\3d\3e\3e\3f\3f\3g\3g\3h\3h\3i\3i\3j\3j\3k\3k\3l\3l\3",
|
||||
"m\3m\3n\3n\3o\3o\3p\3p\3q\3q\3r\3r\3s\3s\3t\3t\3u\3u\3v\3v\3w\3w\3x",
|
||||
"\3x\3y\3y\3y\3y\5y\u036c\ny\3y\7y\u036f\ny\fy\16y\u0372\13y\3y\3y\3",
|
||||
"z\3z\3z\3z\7z\u037a\nz\fz\16z\u037d\13z\3z\3z\3z\5z\u0382\nz\3z\3z\3",
|
||||
"{\3{\3{\3{\3\u037b\2|\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f",
|
||||
"\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32",
|
||||
"\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61",
|
||||
"a\62c\63e\64g\65i\66k\67m8o9q:s;u<w=y>{?}@\177A\u0081B\u0083C\u0085",
|
||||
"D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099",
|
||||
"N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00ad",
|
||||
"X\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9\2\u00bb\2\u00bd\2\u00bf",
|
||||
"\2\u00c1\2\u00c3\2\u00c5\2\u00c7\2\u00c9\2\u00cb\2\u00cd\2\u00cf\2\u00d1",
|
||||
"\2\u00d3\2\u00d5\2\u00d7\2\u00d9\2\u00db\2\u00dd\2\u00df\2\u00e1\2\u00e3",
|
||||
"\2\u00e5\2\u00e7\2\u00e9\2\u00eb\2\u00ed\2\u00ef\2\u00f1^\u00f3_\u00f5",
|
||||
"`\3\2\"\6\2\62;C\\aac|\4\2--//\5\2\62;CHch\3\2\62;\4\2CCcc\4\2DDdd\4",
|
||||
"\2EEee\4\2FFff\4\2GGgg\4\2HHhh\4\2IIii\4\2JJjj\4\2KKkk\4\2LLll\4\2M",
|
||||
"Mmm\4\2NNnn\4\2OOoo\4\2PPpp\4\2QQqq\4\2RRrr\4\2SSss\4\2TTtt\4\2UUuu",
|
||||
"\4\2VVvv\4\2WWww\4\2XXxx\4\2YYyy\4\2ZZzz\4\2[[{{\4\2\\\\||\4\2\f\f\17",
|
||||
"\17\5\2\13\f\17\17\"\"\u037d\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\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2",
|
||||
"\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2",
|
||||
"\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2",
|
||||
"\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65",
|
||||
"\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2",
|
||||
"A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M",
|
||||
"\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3",
|
||||
"\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2",
|
||||
"\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2",
|
||||
"\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2",
|
||||
"\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087",
|
||||
"\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2",
|
||||
"\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2",
|
||||
"\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1",
|
||||
"\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9\3\2",
|
||||
"\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2\2",
|
||||
"\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00f1\3\2\2\2\2\u00f3",
|
||||
"\3\2\2\2\2\u00f5\3\2\2\2\3\u00f7\3\2\2\2\5\u00f9\3\2\2\2\7\u00fb\3\2",
|
||||
"\2\2\t\u00fd\3\2\2\2\13\u00ff\3\2\2\2\r\u0101\3\2\2\2\17\u0103\3\2\2",
|
||||
"\2\21\u0105\3\2\2\2\23\u0107\3\2\2\2\25\u0109\3\2\2\2\27\u010b\3\2\2",
|
||||
"\2\31\u010d\3\2\2\2\33\u010f\3\2\2\2\35\u0111\3\2\2\2\37\u0113\3\2\2",
|
||||
"\2!\u0119\3\2\2\2#\u0120\3\2\2\2%\u0125\3\2\2\2\'\u012d\3\2\2\2)\u0135",
|
||||
"\3\2\2\2+\u013d\3\2\2\2-\u0144\3\2\2\2/\u014a\3\2\2\2\61\u014f\3\2\2",
|
||||
"\2\63\u0153\3\2\2\2\65\u0158\3\2\2\2\67\u0160\3\2\2\29\u016a\3\2\2\2",
|
||||
";\u0173\3\2\2\2=\u0178\3\2\2\2?\u0180\3\2\2\2A\u0187\3\2\2\2C\u018c",
|
||||
"\3\2\2\2E\u018e\3\2\2\2G\u0190\3\2\2\2I\u0194\3\2\2\2K\u0198\3\2\2\2",
|
||||
"M\u019c\3\2\2\2O\u01a2\3\2\2\2Q\u01a6\3\2\2\2S\u01ac\3\2\2\2U\u01b2",
|
||||
"\3\2\2\2W\u01b8\3\2\2\2Y\u01c3\3\2\2\2[\u01c7\3\2\2\2]\u01cc\3\2\2\2",
|
||||
"_\u01d9\3\2\2\2a\u01e1\3\2\2\2c\u01e9\3\2\2\2e\u01f0\3\2\2\2g\u01f7",
|
||||
"\3\2\2\2i\u01fe\3\2\2\2k\u0203\3\2\2\2m\u020a\3\2\2\2o\u0210\3\2\2\2",
|
||||
"q\u0215\3\2\2\2s\u0218\3\2\2\2u\u021b\3\2\2\2w\u0221\3\2\2\2y\u0228",
|
||||
"\3\2\2\2{\u022d\3\2\2\2}\u0231\3\2\2\2\177\u023a\3\2\2\2\u0081\u023e",
|
||||
"\3\2\2\2\u0083\u0241\3\2\2\2\u0085\u0249\3\2\2\2\u0087\u024f\3\2\2\2",
|
||||
"\u0089\u0252\3\2\2\2\u008b\u025a\3\2\2\2\u008d\u0261\3\2\2\2\u008f\u0265",
|
||||
"\3\2\2\2\u0091\u026c\3\2\2\2\u0093\u0274\3\2\2\2\u0095\u027a\3\2\2\2",
|
||||
"\u0097\u0284\3\2\2\2\u0099\u0289\3\2\2\2\u009b\u0292\3\2\2\2\u009d\u0296",
|
||||
"\3\2\2\2\u009f\u029b\3\2\2\2\u00a1\u02a4\3\2\2\2\u00a3\u02ab\3\2\2\2",
|
||||
"\u00a5\u02af\3\2\2\2\u00a7\u02b5\3\2\2\2\u00a9\u02bc\3\2\2\2\u00ab\u02c2",
|
||||
"\3\2\2\2\u00ad\u02c7\3\2\2\2\u00af\u02ce\3\2\2\2\u00b1\u02d3\3\2\2\2",
|
||||
"\u00b3\u0301\3\2\2\2\u00b5\u0303\3\2\2\2\u00b7\u0328\3\2\2\2\u00b9\u032f",
|
||||
"\3\2\2\2\u00bb\u0331\3\2\2\2\u00bd\u0333\3\2\2\2\u00bf\u0335\3\2\2\2",
|
||||
"\u00c1\u0337\3\2\2\2\u00c3\u0339\3\2\2\2\u00c5\u033b\3\2\2\2\u00c7\u033d",
|
||||
"\3\2\2\2\u00c9\u033f\3\2\2\2\u00cb\u0341\3\2\2\2\u00cd\u0343\3\2\2\2",
|
||||
"\u00cf\u0345\3\2\2\2\u00d1\u0347\3\2\2\2\u00d3\u0349\3\2\2\2\u00d5\u034b",
|
||||
"\3\2\2\2\u00d7\u034d\3\2\2\2\u00d9\u034f\3\2\2\2\u00db\u0351\3\2\2\2",
|
||||
"\u00dd\u0353\3\2\2\2\u00df\u0355\3\2\2\2\u00e1\u0357\3\2\2\2\u00e3\u0359",
|
||||
"\3\2\2\2\u00e5\u035b\3\2\2\2\u00e7\u035d\3\2\2\2\u00e9\u035f\3\2\2\2",
|
||||
"\u00eb\u0361\3\2\2\2\u00ed\u0363\3\2\2\2\u00ef\u0365\3\2\2\2\u00f1\u036b",
|
||||
"\3\2\2\2\u00f3\u0375\3\2\2\2\u00f5\u0385\3\2\2\2\u00f7\u00f8\7=\2\2",
|
||||
"\u00f8\4\3\2\2\2\u00f9\u00fa\7*\2\2\u00fa\6\3\2\2\2\u00fb\u00fc\7+\2",
|
||||
"\2\u00fc\b\3\2\2\2\u00fd\u00fe\7.\2\2\u00fe\n\3\2\2\2\u00ff\u0100\7",
|
||||
"?\2\2\u0100\f\3\2\2\2\u0101\u0102\7-\2\2\u0102\16\3\2\2\2\u0103\u0104",
|
||||
"\7/\2\2\u0104\20\3\2\2\2\u0105\u0106\7]\2\2\u0106\22\3\2\2\2\u0107\u0108",
|
||||
"\7_\2\2\u0108\24\3\2\2\2\u0109\u010a\7A\2\2\u010a\26\3\2\2\2\u010b\u010c",
|
||||
"\7\60\2\2\u010c\30\3\2\2\2\u010d\u010e\7<\2\2\u010e\32\3\2\2\2\u010f",
|
||||
"\u0110\7}\2\2\u0110\34\3\2\2\2\u0111\u0112\7\177\2\2\u0112\36\3\2\2",
|
||||
"\2\u0113\u0114\7c\2\2\u0114\u0115\7u\2\2\u0115\u0116\7e\2\2\u0116\u0117",
|
||||
"\7k\2\2\u0117\u0118\7k\2\2\u0118 \3\2\2\2\u0119\u011a\7d\2\2\u011a\u011b",
|
||||
"\7k\2\2\u011b\u011c\7i\2\2\u011c\u011d\7k\2\2\u011d\u011e\7p\2\2\u011e",
|
||||
"\u011f\7v\2\2\u011f\"\3\2\2\2\u0120\u0121\7d\2\2\u0121\u0122\7n\2\2",
|
||||
"\u0122\u0123\7q\2\2\u0123\u0124\7d\2\2\u0124$\3\2\2\2\u0125\u0126\7",
|
||||
"d\2\2\u0126\u0127\7q\2\2\u0127\u0128\7q\2\2\u0128\u0129\7n\2\2\u0129",
|
||||
"\u012a\7g\2\2\u012a\u012b\7c\2\2\u012b\u012c\7p\2\2\u012c&\3\2\2\2\u012d",
|
||||
"\u012e\7e\2\2\u012e\u012f\7q\2\2\u012f\u0130\7w\2\2\u0130\u0131\7p\2",
|
||||
"\2\u0131\u0132\7v\2\2\u0132\u0133\7g\2\2\u0133\u0134\7t\2\2\u0134(\3",
|
||||
"\2\2\2\u0135\u0136\7f\2\2\u0136\u0137\7g\2\2\u0137\u0138\7e\2\2\u0138",
|
||||
"\u0139\7k\2\2\u0139\u013a\7o\2\2\u013a\u013b\7c\2\2\u013b\u013c\7n\2",
|
||||
"\2\u013c*\3\2\2\2\u013d\u013e\7f\2\2\u013e\u013f\7q\2\2\u013f\u0140",
|
||||
"\7w\2\2\u0140\u0141\7d\2\2\u0141\u0142\7n\2\2\u0142\u0143\7g\2\2\u0143",
|
||||
",\3\2\2\2\u0144\u0145\7h\2\2\u0145\u0146\7n\2\2\u0146\u0147\7q\2\2\u0147",
|
||||
"\u0148\7c\2\2\u0148\u0149\7v\2\2\u0149.\3\2\2\2\u014a\u014b\7k\2\2\u014b",
|
||||
"\u014c\7p\2\2\u014c\u014d\7g\2\2\u014d\u014e\7v\2\2\u014e\60\3\2\2\2",
|
||||
"\u014f\u0150\7k\2\2\u0150\u0151\7p\2\2\u0151\u0152\7v\2\2\u0152\62\3",
|
||||
"\2\2\2\u0153\u0154\7v\2\2\u0154\u0155\7g\2\2\u0155\u0156\7z\2\2\u0156",
|
||||
"\u0157\7v\2\2\u0157\64\3\2\2\2\u0158\u0159\7v\2\2\u0159\u015a\7k\2\2",
|
||||
"\u015a\u015b\7p\2\2\u015b\u015c\7{\2\2\u015c\u015d\7k\2\2\u015d\u015e",
|
||||
"\7p\2\2\u015e\u015f\7v\2\2\u015f\66\3\2\2\2\u0160\u0161\7v\2\2\u0161",
|
||||
"\u0162\7k\2\2\u0162\u0163\7o\2\2\u0163\u0164\7g\2\2\u0164\u0165\7u\2",
|
||||
"\2\u0165\u0166\7v\2\2\u0166\u0167\7c\2\2\u0167\u0168\7o\2\2\u0168\u0169",
|
||||
"\7r\2\2\u01698\3\2\2\2\u016a\u016b\7v\2\2\u016b\u016c\7k\2\2\u016c\u016d",
|
||||
"\7o\2\2\u016d\u016e\7g\2\2\u016e\u016f\7w\2\2\u016f\u0170\7w\2\2\u0170",
|
||||
"\u0171\7k\2\2\u0171\u0172\7f\2\2\u0172:\3\2\2\2\u0173\u0174\7w\2\2\u0174",
|
||||
"\u0175\7w\2\2\u0175\u0176\7k\2\2\u0176\u0177\7f\2\2\u0177<\3\2\2\2\u0178",
|
||||
"\u0179\7x\2\2\u0179\u017a\7c\2\2\u017a\u017b\7t\2\2\u017b\u017c\7e\2",
|
||||
"\2\u017c\u017d\7j\2\2\u017d\u017e\7c\2\2\u017e\u017f\7t\2\2\u017f>\3",
|
||||
"\2\2\2\u0180\u0181\7x\2\2\u0181\u0182\7c\2\2\u0182\u0183\7t\2\2\u0183",
|
||||
"\u0184\7k\2\2\u0184\u0185\7p\2\2\u0185\u0186\7v\2\2\u0186@\3\2\2\2\u0187",
|
||||
"\u0188\7n\2\2\u0188\u0189\7k\2\2\u0189\u018a\7u\2\2\u018a\u018b\7v\2",
|
||||
"\2\u018bB\3\2\2\2\u018c\u018d\7>\2\2\u018dD\3\2\2\2\u018e\u018f\7@\2",
|
||||
"\2\u018fF\3\2\2\2\u0190\u0191\7u\2\2\u0191\u0192\7g\2\2\u0192\u0193",
|
||||
"\7v\2\2\u0193H\3\2\2\2\u0194\u0195\7o\2\2\u0195\u0196\7c\2\2\u0196\u0197",
|
||||
"\7r\2\2\u0197J\3\2\2\2\u0198\u0199\5\u00bd_\2\u0199\u019a\5\u00c3b\2",
|
||||
"\u019a\u019b\5\u00c3b\2\u019bL\3\2\2\2\u019c\u019d\5\u00bd_\2\u019d",
|
||||
"\u019e\5\u00d3j\2\u019e\u019f\5\u00e3r\2\u019f\u01a0\5\u00c5c\2\u01a0",
|
||||
"\u01a1\5\u00dfp\2\u01a1N\3\2\2\2\u01a2\u01a3\5\u00bd_\2\u01a3\u01a4",
|
||||
"\5\u00d7l\2\u01a4\u01a5\5\u00c3b\2\u01a5P\3\2\2\2\u01a6\u01a7\5\u00bd",
|
||||
"_\2\u01a7\u01a8\5\u00dbn\2\u01a8\u01a9\5\u00dbn\2\u01a9\u01aa\5\u00d3",
|
||||
"j\2\u01aa\u01ab\5\u00edw\2\u01abR\3\2\2\2\u01ac\u01ad\5\u00bf`\2\u01ad",
|
||||
"\u01ae\5\u00bd_\2\u01ae\u01af\5\u00e3r\2\u01af\u01b0\5\u00c1a\2\u01b0",
|
||||
"\u01b1\5\u00cbf\2\u01b1T\3\2\2\2\u01b2\u01b3\5\u00bf`\2\u01b3\u01b4",
|
||||
"\5\u00c5c\2\u01b4\u01b5\5\u00c9e\2\u01b5\u01b6\5\u00cdg\2\u01b6\u01b7",
|
||||
"\5\u00d7l\2\u01b7V\3\2\2\2\u01b8\u01b9\5\u00c1a\2\u01b9\u01ba\5\u00d3",
|
||||
"j\2\u01ba\u01bb\5\u00e5s\2\u01bb\u01bc\5\u00e1q\2\u01bc\u01bd\5\u00e3",
|
||||
"r\2\u01bd\u01be\5\u00c5c\2\u01be\u01bf\5\u00dfp\2\u01bf\u01c0\5\u00cd",
|
||||
"g\2\u01c0\u01c1\5\u00d7l\2\u01c1\u01c2\5\u00c9e\2\u01c2X\3\2\2\2\u01c3",
|
||||
"\u01c4\5\u00bd_\2\u01c4\u01c5\5\u00e1q\2\u01c5\u01c6\5\u00c1a\2\u01c6",
|
||||
"Z\3\2\2\2\u01c7\u01c8\5\u00c3b\2\u01c8\u01c9\5\u00c5c\2\u01c9\u01ca",
|
||||
"\5\u00e1q\2\u01ca\u01cb\5\u00c1a\2\u01cb\\\3\2\2\2\u01cc\u01cd\5\u00c1",
|
||||
"a\2\u01cd\u01ce\5\u00d9m\2\u01ce\u01cf\5\u00d3j\2\u01cf\u01d0\5\u00e5",
|
||||
"s\2\u01d0\u01d1\5\u00d5k\2\u01d1\u01d2\5\u00d7l\2\u01d2\u01d3\5\u00c7",
|
||||
"d\2\u01d3\u01d4\5\u00bd_\2\u01d4\u01d5\5\u00d5k\2\u01d5\u01d6\5\u00cd",
|
||||
"g\2\u01d6\u01d7\5\u00d3j\2\u01d7\u01d8\5\u00edw\2\u01d8^\3\2\2\2\u01d9",
|
||||
"\u01da\5\u00c1a\2\u01da\u01db\5\u00d9m\2\u01db\u01dc\5\u00d5k\2\u01dc",
|
||||
"\u01dd\5\u00dbn\2\u01dd\u01de\5\u00bd_\2\u01de\u01df\5\u00c1a\2\u01df",
|
||||
"\u01e0\5\u00e3r\2\u01e0`\3\2\2\2\u01e1\u01e2\5\u00c1a\2\u01e2\u01e3",
|
||||
"\5\u00d9m\2\u01e3\u01e4\5\u00e5s\2\u01e4\u01e5\5\u00d7l\2\u01e5\u01e6",
|
||||
"\5\u00e3r\2\u01e6\u01e7\5\u00c5c\2\u01e7\u01e8\5\u00dfp\2\u01e8b\3\2",
|
||||
"\2\2\u01e9\u01ea\5\u00c1a\2\u01ea\u01eb\5\u00dfp\2\u01eb\u01ec\5\u00c5",
|
||||
"c\2\u01ec\u01ed\5\u00bd_\2\u01ed\u01ee\5\u00e3r\2\u01ee\u01ef\5\u00c5",
|
||||
"c\2\u01efd\3\2\2\2\u01f0\u01f1\5\u00c1a\2\u01f1\u01f2\5\u00e5s\2\u01f2",
|
||||
"\u01f3\5\u00e1q\2\u01f3\u01f4\5\u00e3r\2\u01f4\u01f5\5\u00d9m\2\u01f5",
|
||||
"\u01f6\5\u00d5k\2\u01f6f\3\2\2\2\u01f7\u01f8\5\u00c3b\2\u01f8\u01f9",
|
||||
"\5\u00c5c\2\u01f9\u01fa\5\u00d3j\2\u01fa\u01fb\5\u00c5c\2\u01fb\u01fc",
|
||||
"\5\u00e3r\2\u01fc\u01fd\5\u00c5c\2\u01fdh\3\2\2\2\u01fe\u01ff\5\u00c3",
|
||||
"b\2\u01ff\u0200\5\u00dfp\2\u0200\u0201\5\u00d9m\2\u0201\u0202\5\u00db",
|
||||
"n\2\u0202j\3\2\2\2\u0203\u0204\5\u00c5c\2\u0204\u0205\5\u00ebv\2\u0205",
|
||||
"\u0206\5\u00cdg\2\u0206\u0207\5\u00e1q\2\u0207\u0208\5\u00e3r\2\u0208",
|
||||
"\u0209\5\u00e1q\2\u0209l\3\2\2\2\u020a\u020b\5\u00c7d\2\u020b\u020c",
|
||||
"\5\u00bd_\2\u020c\u020d\5\u00d3j\2\u020d\u020e\5\u00e1q\2\u020e\u020f",
|
||||
"\5\u00c5c\2\u020fn\3\2\2\2\u0210\u0211\5\u00c7d\2\u0211\u0212\5\u00df",
|
||||
"p\2\u0212\u0213\5\u00d9m\2\u0213\u0214\5\u00d5k\2\u0214p\3\2\2\2\u0215",
|
||||
"\u0216\5\u00cdg\2\u0216\u0217\5\u00c7d\2\u0217r\3\2\2\2\u0218\u0219",
|
||||
"\5\u00cdg\2\u0219\u021a\5\u00d7l\2\u021at\3\2\2\2\u021b\u021c\5\u00cd",
|
||||
"g\2\u021c\u021d\5\u00d7l\2\u021d\u021e\5\u00c3b\2\u021e\u021f\5\u00c5",
|
||||
"c\2\u021f\u0220\5\u00ebv\2\u0220v\3\2\2\2\u0221\u0222\5\u00cdg\2\u0222",
|
||||
"\u0223\5\u00d7l\2\u0223\u0224\5\u00e1q\2\u0224\u0225\5\u00c5c\2\u0225",
|
||||
"\u0226\5\u00dfp\2\u0226\u0227\5\u00e3r\2\u0227x\3\2\2\2\u0228\u0229",
|
||||
"\5\u00cdg\2\u0229\u022a\5\u00d7l\2\u022a\u022b\5\u00e3r\2\u022b\u022c",
|
||||
"\5\u00d9m\2\u022cz\3\2\2\2\u022d\u022e\5\u00d1i\2\u022e\u022f\5\u00c5",
|
||||
"c\2\u022f\u0230\5\u00edw\2\u0230|\3\2\2\2\u0231\u0232\5\u00d1i\2\u0232",
|
||||
"\u0233\5\u00c5c\2\u0233\u0234\5\u00edw\2\u0234\u0235\5\u00e1q\2\u0235",
|
||||
"\u0236\5\u00dbn\2\u0236\u0237\5\u00bd_\2\u0237\u0238\5\u00c1a\2\u0238",
|
||||
"\u0239\5\u00c5c\2\u0239~\3\2\2\2\u023a\u023b\5\u00d7l\2\u023b\u023c",
|
||||
"\5\u00d9m\2\u023c\u023d\5\u00e3r\2\u023d\u0080\3\2\2\2\u023e\u023f\5",
|
||||
"\u00d9m\2\u023f\u0240\5\u00d7l\2\u0240\u0082\3\2\2\2\u0241\u0242\5\u00d9",
|
||||
"m\2\u0242\u0243\5\u00dbn\2\u0243\u0244\5\u00e3r\2\u0244\u0245\5\u00cd",
|
||||
"g\2\u0245\u0246\5\u00d9m\2\u0246\u0247\5\u00d7l\2\u0247\u0248\5\u00e1",
|
||||
"q\2\u0248\u0084\3\2\2\2\u0249\u024a\5\u00d9m\2\u024a\u024b\5\u00dfp",
|
||||
"\2\u024b\u024c\5\u00c3b\2\u024c\u024d\5\u00c5c\2\u024d\u024e\5\u00df",
|
||||
"p\2\u024e\u0086\3\2\2\2\u024f\u0250\5\u00bf`\2\u0250\u0251\5\u00edw",
|
||||
"\2\u0251\u0088\3\2\2\2\u0252\u0253\5\u00dbn\2\u0253\u0254\5\u00dfp\2",
|
||||
"\u0254\u0255\5\u00cdg\2\u0255\u0256\5\u00d5k\2\u0256\u0257\5\u00bd_",
|
||||
"\2\u0257\u0258\5\u00dfp\2\u0258\u0259\5\u00edw\2\u0259\u008a\3\2\2\2",
|
||||
"\u025a\u025b\5\u00e1q\2\u025b\u025c\5\u00c5c\2\u025c\u025d\5\u00d3j",
|
||||
"\2\u025d\u025e\5\u00c5c\2\u025e\u025f\5\u00c1a\2\u025f\u0260\5\u00e3",
|
||||
"r\2\u0260\u008c\3\2\2\2\u0261\u0262\5\u00e1q\2\u0262\u0263\5\u00c5c",
|
||||
"\2\u0263\u0264\5\u00e3r\2\u0264\u008e\3\2\2\2\u0265\u0266\5\u00e1q\2",
|
||||
"\u0266\u0267\5\u00e3r\2\u0267\u0268\5\u00bd_\2\u0268\u0269\5\u00e3r",
|
||||
"\2\u0269\u026a\5\u00cdg\2\u026a\u026b\5\u00c1a\2\u026b\u0090\3\2\2\2",
|
||||
"\u026c\u026d\5\u00e1q\2\u026d\u026e\5\u00e3r\2\u026e\u026f\5\u00d9m",
|
||||
"\2\u026f\u0270\5\u00dfp\2\u0270\u0271\5\u00bd_\2\u0271\u0272\5\u00c9",
|
||||
"e\2\u0272\u0273\5\u00c5c\2\u0273\u0092\3\2\2\2\u0274\u0275\5\u00e3r",
|
||||
"\2\u0275\u0276\5\u00bd_\2\u0276\u0277\5\u00bf`\2\u0277\u0278\5\u00d3",
|
||||
"j\2\u0278\u0279\5\u00c5c\2\u0279\u0094\3\2\2\2\u027a\u027b\5\u00e3r",
|
||||
"\2\u027b\u027c\5\u00cdg\2\u027c\u027d\5\u00d5k\2\u027d\u027e\5\u00c5",
|
||||
"c\2\u027e\u027f\5\u00e1q\2\u027f\u0280\5\u00e3r\2\u0280\u0281\5\u00bd",
|
||||
"_\2\u0281\u0282\5\u00d5k\2\u0282\u0283\5\u00dbn\2\u0283\u0096\3\2\2",
|
||||
"\2\u0284\u0285\5\u00e3r\2\u0285\u0286\5\u00dfp\2\u0286\u0287\5\u00e5",
|
||||
"s\2\u0287\u0288\5\u00c5c\2\u0288\u0098\3\2\2\2\u0289\u028a\5\u00e3r",
|
||||
"\2\u028a\u028b\5\u00dfp\2\u028b\u028c\5\u00e5s\2\u028c\u028d\5\u00d7",
|
||||
"l\2\u028d\u028e\5\u00c1a\2\u028e\u028f\5\u00bd_\2\u028f\u0290\5\u00e3",
|
||||
"r\2\u0290\u0291\5\u00c5c\2\u0291\u009a\3\2\2\2\u0292\u0293\5\u00e3r",
|
||||
"\2\u0293\u0294\5\u00e3r\2\u0294\u0295\5\u00d3j\2\u0295\u009c\3\2\2\2",
|
||||
"\u0296\u0297\5\u00e3r\2\u0297\u0298\5\u00edw\2\u0298\u0299\5\u00dbn",
|
||||
"\2\u0299\u029a\5\u00c5c\2\u029a\u009e\3\2\2\2\u029b\u029c\5\u00e5s\2",
|
||||
"\u029c\u029d\5\u00d7l\2\u029d\u029e\5\u00d3j\2\u029e\u029f\5\u00d9m",
|
||||
"\2\u029f\u02a0\5\u00c9e\2\u02a0\u02a1\5\u00c9e\2\u02a1\u02a2\5\u00c5",
|
||||
"c\2\u02a2\u02a3\5\u00c3b\2\u02a3\u00a0\3\2\2\2\u02a4\u02a5\5\u00e5s",
|
||||
"\2\u02a5\u02a6\5\u00dbn\2\u02a6\u02a7\5\u00c3b\2\u02a7\u02a8\5\u00bd",
|
||||
"_\2\u02a8\u02a9\5\u00e3r\2\u02a9\u02aa\5\u00c5c\2\u02aa\u00a2\3\2\2",
|
||||
"\2\u02ab\u02ac\5\u00e5s\2\u02ac\u02ad\5\u00e1q\2\u02ad\u02ae\5\u00c5",
|
||||
"c\2\u02ae\u00a4\3\2\2\2\u02af\u02b0\5\u00e5s\2\u02b0\u02b1\5\u00e1q",
|
||||
"\2\u02b1\u02b2\5\u00cdg\2\u02b2\u02b3\5\u00d7l\2\u02b3\u02b4\5\u00c9",
|
||||
"e\2\u02b4\u00a6\3\2\2\2\u02b5\u02b6\5\u00e7t\2\u02b6\u02b7\5\u00bd_",
|
||||
"\2\u02b7\u02b8\5\u00d3j\2\u02b8\u02b9\5\u00e5s\2\u02b9\u02ba\5\u00c5",
|
||||
"c\2\u02ba\u02bb\5\u00e1q\2\u02bb\u00a8\3\2\2\2\u02bc\u02bd\5\u00e9u",
|
||||
"\2\u02bd\u02be\5\u00cbf\2\u02be\u02bf\5\u00c5c\2\u02bf\u02c0\5\u00df",
|
||||
"p\2\u02c0\u02c1\5\u00c5c\2\u02c1\u00aa\3\2\2\2\u02c2\u02c3\5\u00e9u",
|
||||
"\2\u02c3\u02c4\5\u00cdg\2\u02c4\u02c5\5\u00e3r\2\u02c5\u02c6\5\u00cb",
|
||||
"f\2\u02c6\u00ac\3\2\2\2\u02c7\u02cb\t\2\2\2\u02c8\u02ca\t\2\2\2\u02c9",
|
||||
"\u02c8\3\2\2\2\u02ca\u02cd\3\2\2\2\u02cb\u02c9\3\2\2\2\u02cb\u02cc\3",
|
||||
"\2\2\2\u02cc\u00ae\3\2\2\2\u02cd\u02cb\3\2\2\2\u02ce\u02cf\7)\2\2\u02cf",
|
||||
"\u02d0\5\u00adW\2\u02d0\u02d1\7)\2\2\u02d1\u00b0\3\2\2\2\u02d2\u02d4",
|
||||
"\7/\2\2\u02d3\u02d2\3\2\2\2\u02d3\u02d4\3\2\2\2\u02d4\u02d6\3\2\2\2",
|
||||
"\u02d5\u02d7\5\u00bb^\2\u02d6\u02d5\3\2\2\2\u02d7\u02d8\3\2\2\2\u02d8",
|
||||
"\u02d6\3\2\2\2\u02d8\u02d9\3\2\2\2\u02d9\u00b2\3\2\2\2\u02da\u02dc\7",
|
||||
"/\2\2\u02db\u02da\3\2\2\2\u02db\u02dc\3\2\2\2\u02dc\u02de\3\2\2\2\u02dd",
|
||||
"\u02df\5\u00bb^\2\u02de\u02dd\3\2\2\2\u02df\u02e0\3\2\2\2\u02e0\u02de",
|
||||
"\3\2\2\2\u02e0\u02e1\3\2\2\2\u02e1\u02e9\3\2\2\2\u02e2\u02e6\7\60\2",
|
||||
"\2\u02e3\u02e5\5\u00bb^\2\u02e4\u02e3\3\2\2\2\u02e5\u02e8\3\2\2\2\u02e6",
|
||||
"\u02e4\3\2\2\2\u02e6\u02e7\3\2\2\2\u02e7\u02ea\3\2\2\2\u02e8\u02e6\3",
|
||||
"\2\2\2\u02e9\u02e2\3\2\2\2\u02e9\u02ea\3\2\2\2\u02ea\u02f4\3\2\2\2\u02eb",
|
||||
"\u02ed\5\u00c5c\2\u02ec\u02ee\t\3\2\2\u02ed\u02ec\3\2\2\2\u02ed\u02ee",
|
||||
"\3\2\2\2\u02ee\u02f0\3\2\2\2\u02ef\u02f1\5\u00bb^\2\u02f0\u02ef\3\2",
|
||||
"\2\2\u02f1\u02f2\3\2\2\2\u02f2\u02f0\3\2\2\2\u02f2\u02f3\3\2\2\2\u02f3",
|
||||
"\u02f5\3\2\2\2\u02f4\u02eb\3\2\2\2\u02f4\u02f5\3\2\2\2\u02f5\u0302\3",
|
||||
"\2\2\2\u02f6\u02f7\7P\2\2\u02f7\u02f8\7c\2\2\u02f8\u0302\7P\2\2\u02f9",
|
||||
"\u02fa\7K\2\2\u02fa\u02fb\7p\2\2\u02fb\u02fc\7h\2\2\u02fc\u02fd\7k\2",
|
||||
"\2\u02fd\u02fe\7p\2\2\u02fe\u02ff\7k\2\2\u02ff\u0300\7v\2\2\u0300\u0302",
|
||||
"\7{\2\2\u0301\u02db\3\2\2\2\u0301\u02f6\3\2\2\2\u0301\u02f9\3\2\2\2",
|
||||
"\u0302\u00b4\3\2\2\2\u0303\u0304\5\u00b9]\2\u0304\u0305\5\u00b9]\2\u0305",
|
||||
"\u0306\5\u00b9]\2\u0306\u0307\5\u00b9]\2\u0307\u0308\5\u00b9]\2\u0308",
|
||||
"\u0309\5\u00b9]\2\u0309\u030a\5\u00b9]\2\u030a\u030b\5\u00b9]\2\u030b",
|
||||
"\u030c\7/\2\2\u030c\u030d\5\u00b9]\2\u030d\u030e\5\u00b9]\2\u030e\u030f",
|
||||
"\5\u00b9]\2\u030f\u0310\5\u00b9]\2\u0310\u0311\7/\2\2\u0311\u0312\5",
|
||||
"\u00b9]\2\u0312\u0313\5\u00b9]\2\u0313\u0314\5\u00b9]\2\u0314\u0315",
|
||||
"\5\u00b9]\2\u0315\u0316\7/\2\2\u0316\u0317\5\u00b9]\2\u0317\u0318\5",
|
||||
"\u00b9]\2\u0318\u0319\5\u00b9]\2\u0319\u031a\5\u00b9]\2\u031a\u031b",
|
||||
"\7/\2\2\u031b\u031c\5\u00b9]\2\u031c\u031d\5\u00b9]\2\u031d\u031e\5",
|
||||
"\u00b9]\2\u031e\u031f\5\u00b9]\2\u031f\u0320\5\u00b9]\2\u0320\u0321",
|
||||
"\5\u00b9]\2\u0321\u0322\5\u00b9]\2\u0322\u0323\5\u00b9]\2\u0323\u0324",
|
||||
"\5\u00b9]\2\u0324\u0325\5\u00b9]\2\u0325\u0326\5\u00b9]\2\u0326\u0327",
|
||||
"\5\u00b9]\2\u0327\u00b6\3\2\2\2\u0328\u0329\7\62\2\2\u0329\u032b\5\u00eb",
|
||||
"v\2\u032a\u032c\5\u00b9]\2\u032b\u032a\3\2\2\2\u032c\u032d\3\2\2\2\u032d",
|
||||
"\u032b\3\2\2\2\u032d\u032e\3\2\2\2\u032e\u00b8\3\2\2\2\u032f\u0330\t",
|
||||
"\4\2\2\u0330\u00ba\3\2\2\2\u0331\u0332\t\5\2\2\u0332\u00bc\3\2\2\2\u0333",
|
||||
"\u0334\t\6\2\2\u0334\u00be\3\2\2\2\u0335\u0336\t\7\2\2\u0336\u00c0\3",
|
||||
"\2\2\2\u0337\u0338\t\b\2\2\u0338\u00c2\3\2\2\2\u0339\u033a\t\t\2\2\u033a",
|
||||
"\u00c4\3\2\2\2\u033b\u033c\t\n\2\2\u033c\u00c6\3\2\2\2\u033d\u033e\t",
|
||||
"\13\2\2\u033e\u00c8\3\2\2\2\u033f\u0340\t\f\2\2\u0340\u00ca\3\2\2\2",
|
||||
"\u0341\u0342\t\r\2\2\u0342\u00cc\3\2\2\2\u0343\u0344\t\16\2\2\u0344",
|
||||
"\u00ce\3\2\2\2\u0345\u0346\t\17\2\2\u0346\u00d0\3\2\2\2\u0347\u0348",
|
||||
"\t\20\2\2\u0348\u00d2\3\2\2\2\u0349\u034a\t\21\2\2\u034a\u00d4\3\2\2",
|
||||
"\2\u034b\u034c\t\22\2\2\u034c\u00d6\3\2\2\2\u034d\u034e\t\23\2\2\u034e",
|
||||
"\u00d8\3\2\2\2\u034f\u0350\t\24\2\2\u0350\u00da\3\2\2\2\u0351\u0352",
|
||||
"\t\25\2\2\u0352\u00dc\3\2\2\2\u0353\u0354\t\26\2\2\u0354\u00de\3\2\2",
|
||||
"\2\u0355\u0356\t\27\2\2\u0356\u00e0\3\2\2\2\u0357\u0358\t\30\2\2\u0358",
|
||||
"\u00e2\3\2\2\2\u0359\u035a\t\31\2\2\u035a\u00e4\3\2\2\2\u035b\u035c",
|
||||
"\t\32\2\2\u035c\u00e6\3\2\2\2\u035d\u035e\t\33\2\2\u035e\u00e8\3\2\2",
|
||||
"\2\u035f\u0360\t\34\2\2\u0360\u00ea\3\2\2\2\u0361\u0362\t\35\2\2\u0362",
|
||||
"\u00ec\3\2\2\2\u0363\u0364\t\36\2\2\u0364\u00ee\3\2\2\2\u0365\u0366",
|
||||
"\t\37\2\2\u0366\u00f0\3\2\2\2\u0367\u0368\7/\2\2\u0368\u036c\7/\2\2",
|
||||
"\u0369\u036a\7\61\2\2\u036a\u036c\7\61\2\2\u036b\u0367\3\2\2\2\u036b",
|
||||
"\u0369\3\2\2\2\u036c\u0370\3\2\2\2\u036d\u036f\n \2\2\u036e\u036d\3",
|
||||
"\2\2\2\u036f\u0372\3\2\2\2\u0370\u036e\3\2\2\2\u0370\u0371\3\2\2\2\u0371",
|
||||
"\u0373\3\2\2\2\u0372\u0370\3\2\2\2\u0373\u0374\by\2\2\u0374\u00f2\3",
|
||||
"\2\2\2\u0375\u0376\7\61\2\2\u0376\u0377\7,\2\2\u0377\u037b\3\2\2\2\u0378",
|
||||
"\u037a\13\2\2\2\u0379\u0378\3\2\2\2\u037a\u037d\3\2\2\2\u037b\u037c",
|
||||
"\3\2\2\2\u037b\u0379\3\2\2\2\u037c\u0381\3\2\2\2\u037d\u037b\3\2\2\2",
|
||||
"\u037e\u037f\7,\2\2\u037f\u0382\7\61\2\2\u0380\u0382\7\2\2\3\u0381\u037e",
|
||||
"\3\2\2\2\u0381\u0380\3\2\2\2\u0382\u0383\3\2\2\2\u0383\u0384\bz\2\2",
|
||||
"\u0384\u00f4\3\2\2\2\u0385\u0386\t!\2\2\u0386\u0387\3\2\2\2\u0387\u0388",
|
||||
"\b{\2\2\u0388\u00f6\3\2\2\2\23\2\u02cb\u02d3\u02d8\u02db\u02e0\u02e6",
|
||||
"\u02e9\u02ed\u02f2\u02f4\u0301\u032d\u036b\u0370\u037b\u0381\3\2\3\2"].join("");
|
||||
|
||||
|
||||
var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);
|
||||
|
||||
var decisionsToDFA = atn.decisionToState.map( function(ds, index) { return new antlr4.dfa.DFA(ds, index); });
|
||||
|
||||
function CQL3Lexer(input) {
|
||||
antlr4.Lexer.call(this, input);
|
||||
this._interp = new antlr4.atn.LexerATNSimulator(this, atn, decisionsToDFA, new antlr4.PredictionContextCache());
|
||||
return this;
|
||||
}
|
||||
|
||||
CQL3Lexer.prototype = Object.create(antlr4.Lexer.prototype);
|
||||
CQL3Lexer.prototype.constructor = CQL3Lexer;
|
||||
|
||||
CQL3Lexer.EOF = antlr4.Token.EOF;
|
||||
CQL3Lexer.T__0 = 1;
|
||||
CQL3Lexer.T__1 = 2;
|
||||
CQL3Lexer.T__2 = 3;
|
||||
CQL3Lexer.T__3 = 4;
|
||||
CQL3Lexer.T__4 = 5;
|
||||
CQL3Lexer.T__5 = 6;
|
||||
CQL3Lexer.T__6 = 7;
|
||||
CQL3Lexer.T__7 = 8;
|
||||
CQL3Lexer.T__8 = 9;
|
||||
CQL3Lexer.T__9 = 10;
|
||||
CQL3Lexer.T__10 = 11;
|
||||
CQL3Lexer.T__11 = 12;
|
||||
CQL3Lexer.T__12 = 13;
|
||||
CQL3Lexer.T__13 = 14;
|
||||
CQL3Lexer.T__14 = 15;
|
||||
CQL3Lexer.T__15 = 16;
|
||||
CQL3Lexer.T__16 = 17;
|
||||
CQL3Lexer.T__17 = 18;
|
||||
CQL3Lexer.T__18 = 19;
|
||||
CQL3Lexer.T__19 = 20;
|
||||
CQL3Lexer.T__20 = 21;
|
||||
CQL3Lexer.T__21 = 22;
|
||||
CQL3Lexer.T__22 = 23;
|
||||
CQL3Lexer.T__23 = 24;
|
||||
CQL3Lexer.T__24 = 25;
|
||||
CQL3Lexer.T__25 = 26;
|
||||
CQL3Lexer.T__26 = 27;
|
||||
CQL3Lexer.T__27 = 28;
|
||||
CQL3Lexer.T__28 = 29;
|
||||
CQL3Lexer.T__29 = 30;
|
||||
CQL3Lexer.T__30 = 31;
|
||||
CQL3Lexer.T__31 = 32;
|
||||
CQL3Lexer.T__32 = 33;
|
||||
CQL3Lexer.T__33 = 34;
|
||||
CQL3Lexer.T__34 = 35;
|
||||
CQL3Lexer.T__35 = 36;
|
||||
CQL3Lexer.K_ADD = 37;
|
||||
CQL3Lexer.K_ALTER = 38;
|
||||
CQL3Lexer.K_AND = 39;
|
||||
CQL3Lexer.K_APPLY = 40;
|
||||
CQL3Lexer.K_BATCH = 41;
|
||||
CQL3Lexer.K_BEGIN = 42;
|
||||
CQL3Lexer.K_CLUSTERING = 43;
|
||||
CQL3Lexer.K_ASC = 44;
|
||||
CQL3Lexer.K_DESC = 45;
|
||||
CQL3Lexer.K_COLUMNFAMILY = 46;
|
||||
CQL3Lexer.K_COMPACT = 47;
|
||||
CQL3Lexer.K_COUNTER = 48;
|
||||
CQL3Lexer.K_CREATE = 49;
|
||||
CQL3Lexer.K_CUSTOM = 50;
|
||||
CQL3Lexer.K_DELETE = 51;
|
||||
CQL3Lexer.K_DROP = 52;
|
||||
CQL3Lexer.K_EXISTS = 53;
|
||||
CQL3Lexer.K_FALSE = 54;
|
||||
CQL3Lexer.K_FROM = 55;
|
||||
CQL3Lexer.K_IF = 56;
|
||||
CQL3Lexer.K_IN = 57;
|
||||
CQL3Lexer.K_INDEX = 58;
|
||||
CQL3Lexer.K_INSERT = 59;
|
||||
CQL3Lexer.K_INTO = 60;
|
||||
CQL3Lexer.K_KEY = 61;
|
||||
CQL3Lexer.K_KEYSPACE = 62;
|
||||
CQL3Lexer.K_NOT = 63;
|
||||
CQL3Lexer.K_ON = 64;
|
||||
CQL3Lexer.K_OPTIONS = 65;
|
||||
CQL3Lexer.K_ORDER = 66;
|
||||
CQL3Lexer.K_BY = 67;
|
||||
CQL3Lexer.K_PRIMARY = 68;
|
||||
CQL3Lexer.K_SELECT = 69;
|
||||
CQL3Lexer.K_SET = 70;
|
||||
CQL3Lexer.K_STATIC = 71;
|
||||
CQL3Lexer.K_STORAGE = 72;
|
||||
CQL3Lexer.K_TABLE = 73;
|
||||
CQL3Lexer.K_TIMESTAMP = 74;
|
||||
CQL3Lexer.K_TRUE = 75;
|
||||
CQL3Lexer.K_TRUNCATE = 76;
|
||||
CQL3Lexer.K_TTL = 77;
|
||||
CQL3Lexer.K_TYPE = 78;
|
||||
CQL3Lexer.K_UNLOGGED = 79;
|
||||
CQL3Lexer.K_UPDATE = 80;
|
||||
CQL3Lexer.K_USE = 81;
|
||||
CQL3Lexer.K_USING = 82;
|
||||
CQL3Lexer.K_VALUES = 83;
|
||||
CQL3Lexer.K_WHERE = 84;
|
||||
CQL3Lexer.K_WITH = 85;
|
||||
CQL3Lexer.IDENTIFIER = 86;
|
||||
CQL3Lexer.STRING = 87;
|
||||
CQL3Lexer.INTEGER = 88;
|
||||
CQL3Lexer.FLOAT = 89;
|
||||
CQL3Lexer.UUID = 90;
|
||||
CQL3Lexer.BLOB = 91;
|
||||
CQL3Lexer.SINGLE_LINE_COMMENT = 92;
|
||||
CQL3Lexer.MULTILINE_COMMENT = 93;
|
||||
CQL3Lexer.WS = 94;
|
||||
|
||||
|
||||
CQL3Lexer.modeNames = [ "DEFAULT_MODE" ];
|
||||
|
||||
CQL3Lexer.literalNames = [ 'null', "';'", "'('", "')'", "','", "'='", "'+'",
|
||||
"'-'", "'['", "']'", "'?'", "'.'", "':'", "'{'",
|
||||
"'}'", "'ascii'", "'bigint'", "'blob'", "'boolean'",
|
||||
"'counter'", "'decimal'", "'double'", "'float'",
|
||||
"'inet'", "'int'", "'text'", "'tinyint'", "'timestamp'",
|
||||
"'timeuuid'", "'uuid'", "'varchar'", "'varint'",
|
||||
"'list'", "'<'", "'>'", "'set'", "'map'" ];
|
||||
|
||||
CQL3Lexer.symbolicNames = [ 'null', 'null', 'null', 'null', 'null', 'null',
|
||||
'null', 'null', 'null', 'null', 'null', 'null',
|
||||
'null', 'null', 'null', 'null', 'null', 'null',
|
||||
'null', 'null', 'null', 'null', 'null', 'null',
|
||||
'null', 'null', 'null', 'null', 'null', 'null',
|
||||
'null', 'null', 'null', 'null', 'null', 'null',
|
||||
'null', "K_ADD", "K_ALTER", "K_AND", "K_APPLY",
|
||||
"K_BATCH", "K_BEGIN", "K_CLUSTERING", "K_ASC",
|
||||
"K_DESC", "K_COLUMNFAMILY", "K_COMPACT", "K_COUNTER",
|
||||
"K_CREATE", "K_CUSTOM", "K_DELETE", "K_DROP",
|
||||
"K_EXISTS", "K_FALSE", "K_FROM", "K_IF", "K_IN",
|
||||
"K_INDEX", "K_INSERT", "K_INTO", "K_KEY", "K_KEYSPACE",
|
||||
"K_NOT", "K_ON", "K_OPTIONS", "K_ORDER", "K_BY",
|
||||
"K_PRIMARY", "K_SELECT", "K_SET", "K_STATIC",
|
||||
"K_STORAGE", "K_TABLE", "K_TIMESTAMP", "K_TRUE",
|
||||
"K_TRUNCATE", "K_TTL", "K_TYPE", "K_UNLOGGED",
|
||||
"K_UPDATE", "K_USE", "K_USING", "K_VALUES",
|
||||
"K_WHERE", "K_WITH", "IDENTIFIER", "STRING",
|
||||
"INTEGER", "FLOAT", "UUID", "BLOB", "SINGLE_LINE_COMMENT",
|
||||
"MULTILINE_COMMENT", "WS" ];
|
||||
|
||||
CQL3Lexer.ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5",
|
||||
"T__6", "T__7", "T__8", "T__9", "T__10", "T__11",
|
||||
"T__12", "T__13", "T__14", "T__15", "T__16", "T__17",
|
||||
"T__18", "T__19", "T__20", "T__21", "T__22", "T__23",
|
||||
"T__24", "T__25", "T__26", "T__27", "T__28", "T__29",
|
||||
"T__30", "T__31", "T__32", "T__33", "T__34", "T__35",
|
||||
"K_ADD", "K_ALTER", "K_AND", "K_APPLY", "K_BATCH",
|
||||
"K_BEGIN", "K_CLUSTERING", "K_ASC", "K_DESC", "K_COLUMNFAMILY",
|
||||
"K_COMPACT", "K_COUNTER", "K_CREATE", "K_CUSTOM",
|
||||
"K_DELETE", "K_DROP", "K_EXISTS", "K_FALSE", "K_FROM",
|
||||
"K_IF", "K_IN", "K_INDEX", "K_INSERT", "K_INTO",
|
||||
"K_KEY", "K_KEYSPACE", "K_NOT", "K_ON", "K_OPTIONS",
|
||||
"K_ORDER", "K_BY", "K_PRIMARY", "K_SELECT", "K_SET",
|
||||
"K_STATIC", "K_STORAGE", "K_TABLE", "K_TIMESTAMP",
|
||||
"K_TRUE", "K_TRUNCATE", "K_TTL", "K_TYPE", "K_UNLOGGED",
|
||||
"K_UPDATE", "K_USE", "K_USING", "K_VALUES", "K_WHERE",
|
||||
"K_WITH", "IDENTIFIER", "STRING", "INTEGER", "FLOAT",
|
||||
"UUID", "BLOB", "HEX", "DIGIT", "A", "B", "C", "D",
|
||||
"E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
|
||||
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
|
||||
"Y", "Z", "SINGLE_LINE_COMMENT", "MULTILINE_COMMENT",
|
||||
"WS" ];
|
||||
|
||||
CQL3Lexer.grammarFileName = "CQL3.g4";
|
||||
|
||||
|
||||
|
||||
exports.CQL3Lexer = CQL3Lexer;
|
||||
|
||||
130
docsys/src/main/node/docsys/antlr/CQL3Lexer.tokens
Normal file
130
docsys/src/main/node/docsys/antlr/CQL3Lexer.tokens
Normal file
@@ -0,0 +1,130 @@
|
||||
T__0=1
|
||||
T__1=2
|
||||
T__2=3
|
||||
T__3=4
|
||||
T__4=5
|
||||
T__5=6
|
||||
T__6=7
|
||||
T__7=8
|
||||
T__8=9
|
||||
T__9=10
|
||||
T__10=11
|
||||
T__11=12
|
||||
T__12=13
|
||||
T__13=14
|
||||
T__14=15
|
||||
T__15=16
|
||||
T__16=17
|
||||
T__17=18
|
||||
T__18=19
|
||||
T__19=20
|
||||
T__20=21
|
||||
T__21=22
|
||||
T__22=23
|
||||
T__23=24
|
||||
T__24=25
|
||||
T__25=26
|
||||
T__26=27
|
||||
T__27=28
|
||||
T__28=29
|
||||
T__29=30
|
||||
T__30=31
|
||||
T__31=32
|
||||
T__32=33
|
||||
T__33=34
|
||||
T__34=35
|
||||
T__35=36
|
||||
K_ADD=37
|
||||
K_ALTER=38
|
||||
K_AND=39
|
||||
K_APPLY=40
|
||||
K_BATCH=41
|
||||
K_BEGIN=42
|
||||
K_CLUSTERING=43
|
||||
K_ASC=44
|
||||
K_DESC=45
|
||||
K_COLUMNFAMILY=46
|
||||
K_COMPACT=47
|
||||
K_COUNTER=48
|
||||
K_CREATE=49
|
||||
K_CUSTOM=50
|
||||
K_DELETE=51
|
||||
K_DROP=52
|
||||
K_EXISTS=53
|
||||
K_FALSE=54
|
||||
K_FROM=55
|
||||
K_IF=56
|
||||
K_IN=57
|
||||
K_INDEX=58
|
||||
K_INSERT=59
|
||||
K_INTO=60
|
||||
K_KEY=61
|
||||
K_KEYSPACE=62
|
||||
K_NOT=63
|
||||
K_ON=64
|
||||
K_OPTIONS=65
|
||||
K_ORDER=66
|
||||
K_BY=67
|
||||
K_PRIMARY=68
|
||||
K_SELECT=69
|
||||
K_SET=70
|
||||
K_STATIC=71
|
||||
K_STORAGE=72
|
||||
K_TABLE=73
|
||||
K_TIMESTAMP=74
|
||||
K_TRUE=75
|
||||
K_TRUNCATE=76
|
||||
K_TTL=77
|
||||
K_TYPE=78
|
||||
K_UNLOGGED=79
|
||||
K_UPDATE=80
|
||||
K_USE=81
|
||||
K_USING=82
|
||||
K_VALUES=83
|
||||
K_WHERE=84
|
||||
K_WITH=85
|
||||
IDENTIFIER=86
|
||||
STRING=87
|
||||
INTEGER=88
|
||||
FLOAT=89
|
||||
UUID=90
|
||||
BLOB=91
|
||||
SINGLE_LINE_COMMENT=92
|
||||
MULTILINE_COMMENT=93
|
||||
WS=94
|
||||
';'=1
|
||||
'('=2
|
||||
')'=3
|
||||
','=4
|
||||
'='=5
|
||||
'+'=6
|
||||
'-'=7
|
||||
'['=8
|
||||
']'=9
|
||||
'?'=10
|
||||
'.'=11
|
||||
':'=12
|
||||
'{'=13
|
||||
'}'=14
|
||||
'ascii'=15
|
||||
'bigint'=16
|
||||
'blob'=17
|
||||
'boolean'=18
|
||||
'counter'=19
|
||||
'decimal'=20
|
||||
'double'=21
|
||||
'float'=22
|
||||
'inet'=23
|
||||
'int'=24
|
||||
'text'=25
|
||||
'tinyint'=26
|
||||
'timestamp'=27
|
||||
'timeuuid'=28
|
||||
'uuid'=29
|
||||
'varchar'=30
|
||||
'varint'=31
|
||||
'list'=32
|
||||
'<'=33
|
||||
'>'=34
|
||||
'set'=35
|
||||
'map'=36
|
||||
636
docsys/src/main/node/docsys/antlr/CQL3Listener.js
Normal file
636
docsys/src/main/node/docsys/antlr/CQL3Listener.js
Normal file
@@ -0,0 +1,636 @@
|
||||
// Generated from CQL3.g4 by ANTLR 4.5
|
||||
// jshint ignore: start
|
||||
var antlr4 = require('antlr4/index');
|
||||
|
||||
// This class defines a complete listener for a parse tree produced by CQL3Parser.
|
||||
function CQL3Listener() {
|
||||
antlr4.tree.ParseTreeListener.call(this);
|
||||
return this;
|
||||
}
|
||||
|
||||
CQL3Listener.prototype = Object.create(antlr4.tree.ParseTreeListener.prototype);
|
||||
CQL3Listener.prototype.constructor = CQL3Listener;
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#statements.
|
||||
CQL3Listener.prototype.enterStatements = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#statements.
|
||||
CQL3Listener.prototype.exitStatements = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#statement.
|
||||
CQL3Listener.prototype.enterStatement = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#statement.
|
||||
CQL3Listener.prototype.exitStatement = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#dml_statements.
|
||||
CQL3Listener.prototype.enterDml_statements = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#dml_statements.
|
||||
CQL3Listener.prototype.exitDml_statements = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#dml_statement.
|
||||
CQL3Listener.prototype.enterDml_statement = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#dml_statement.
|
||||
CQL3Listener.prototype.exitDml_statement = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#create_keyspace_stmt.
|
||||
CQL3Listener.prototype.enterCreate_keyspace_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#create_keyspace_stmt.
|
||||
CQL3Listener.prototype.exitCreate_keyspace_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#alter_keyspace_stmt.
|
||||
CQL3Listener.prototype.enterAlter_keyspace_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#alter_keyspace_stmt.
|
||||
CQL3Listener.prototype.exitAlter_keyspace_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#drop_keyspace_stmt.
|
||||
CQL3Listener.prototype.enterDrop_keyspace_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#drop_keyspace_stmt.
|
||||
CQL3Listener.prototype.exitDrop_keyspace_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#use_stmt.
|
||||
CQL3Listener.prototype.enterUse_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#use_stmt.
|
||||
CQL3Listener.prototype.exitUse_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#create_table_stmt.
|
||||
CQL3Listener.prototype.enterCreate_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#create_table_stmt.
|
||||
CQL3Listener.prototype.exitCreate_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#alter_table_stmt.
|
||||
CQL3Listener.prototype.enterAlter_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#alter_table_stmt.
|
||||
CQL3Listener.prototype.exitAlter_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#alter_table_instruction.
|
||||
CQL3Listener.prototype.enterAlter_table_instruction = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#alter_table_instruction.
|
||||
CQL3Listener.prototype.exitAlter_table_instruction = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#drop_table_stmt.
|
||||
CQL3Listener.prototype.enterDrop_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#drop_table_stmt.
|
||||
CQL3Listener.prototype.exitDrop_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#truncate_table_stmt.
|
||||
CQL3Listener.prototype.enterTruncate_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#truncate_table_stmt.
|
||||
CQL3Listener.prototype.exitTruncate_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#create_index_stmt.
|
||||
CQL3Listener.prototype.enterCreate_index_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#create_index_stmt.
|
||||
CQL3Listener.prototype.exitCreate_index_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#drop_index_stmt.
|
||||
CQL3Listener.prototype.enterDrop_index_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#drop_index_stmt.
|
||||
CQL3Listener.prototype.exitDrop_index_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#insert_stmt.
|
||||
CQL3Listener.prototype.enterInsert_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#insert_stmt.
|
||||
CQL3Listener.prototype.exitInsert_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#column_names.
|
||||
CQL3Listener.prototype.enterColumn_names = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#column_names.
|
||||
CQL3Listener.prototype.exitColumn_names = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#column_values.
|
||||
CQL3Listener.prototype.enterColumn_values = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#column_values.
|
||||
CQL3Listener.prototype.exitColumn_values = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#upsert_options.
|
||||
CQL3Listener.prototype.enterUpsert_options = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#upsert_options.
|
||||
CQL3Listener.prototype.exitUpsert_options = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#upsert_option.
|
||||
CQL3Listener.prototype.enterUpsert_option = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#upsert_option.
|
||||
CQL3Listener.prototype.exitUpsert_option = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#index_name.
|
||||
CQL3Listener.prototype.enterIndex_name = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#index_name.
|
||||
CQL3Listener.prototype.exitIndex_name = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#index_class.
|
||||
CQL3Listener.prototype.enterIndex_class = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#index_class.
|
||||
CQL3Listener.prototype.exitIndex_class = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#index_options.
|
||||
CQL3Listener.prototype.enterIndex_options = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#index_options.
|
||||
CQL3Listener.prototype.exitIndex_options = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#update_stmt.
|
||||
CQL3Listener.prototype.enterUpdate_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#update_stmt.
|
||||
CQL3Listener.prototype.exitUpdate_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#update_assignments.
|
||||
CQL3Listener.prototype.enterUpdate_assignments = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#update_assignments.
|
||||
CQL3Listener.prototype.exitUpdate_assignments = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#update_assignment.
|
||||
CQL3Listener.prototype.enterUpdate_assignment = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#update_assignment.
|
||||
CQL3Listener.prototype.exitUpdate_assignment = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#update_conditions.
|
||||
CQL3Listener.prototype.enterUpdate_conditions = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#update_conditions.
|
||||
CQL3Listener.prototype.exitUpdate_conditions = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#update_condition.
|
||||
CQL3Listener.prototype.enterUpdate_condition = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#update_condition.
|
||||
CQL3Listener.prototype.exitUpdate_condition = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#where_clause.
|
||||
CQL3Listener.prototype.enterWhere_clause = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#where_clause.
|
||||
CQL3Listener.prototype.exitWhere_clause = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#relation.
|
||||
CQL3Listener.prototype.enterRelation = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#relation.
|
||||
CQL3Listener.prototype.exitRelation = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#delete_stmt.
|
||||
CQL3Listener.prototype.enterDelete_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#delete_stmt.
|
||||
CQL3Listener.prototype.exitDelete_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#delete_conditions.
|
||||
CQL3Listener.prototype.enterDelete_conditions = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#delete_conditions.
|
||||
CQL3Listener.prototype.exitDelete_conditions = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#delete_condition.
|
||||
CQL3Listener.prototype.enterDelete_condition = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#delete_condition.
|
||||
CQL3Listener.prototype.exitDelete_condition = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#delete_selections.
|
||||
CQL3Listener.prototype.enterDelete_selections = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#delete_selections.
|
||||
CQL3Listener.prototype.exitDelete_selections = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#delete_selection.
|
||||
CQL3Listener.prototype.enterDelete_selection = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#delete_selection.
|
||||
CQL3Listener.prototype.exitDelete_selection = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#batch_stmt.
|
||||
CQL3Listener.prototype.enterBatch_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#batch_stmt.
|
||||
CQL3Listener.prototype.exitBatch_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#batch_options.
|
||||
CQL3Listener.prototype.enterBatch_options = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#batch_options.
|
||||
CQL3Listener.prototype.exitBatch_options = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#batch_option.
|
||||
CQL3Listener.prototype.enterBatch_option = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#batch_option.
|
||||
CQL3Listener.prototype.exitBatch_option = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#table_name.
|
||||
CQL3Listener.prototype.enterTable_name = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#table_name.
|
||||
CQL3Listener.prototype.exitTable_name = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#table_name_noks.
|
||||
CQL3Listener.prototype.enterTable_name_noks = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#table_name_noks.
|
||||
CQL3Listener.prototype.exitTable_name_noks = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#column_name.
|
||||
CQL3Listener.prototype.enterColumn_name = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#column_name.
|
||||
CQL3Listener.prototype.exitColumn_name = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#table_options.
|
||||
CQL3Listener.prototype.enterTable_options = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#table_options.
|
||||
CQL3Listener.prototype.exitTable_options = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#table_option.
|
||||
CQL3Listener.prototype.enterTable_option = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#table_option.
|
||||
CQL3Listener.prototype.exitTable_option = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#asc_or_desc.
|
||||
CQL3Listener.prototype.enterAsc_or_desc = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#asc_or_desc.
|
||||
CQL3Listener.prototype.exitAsc_or_desc = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#column_definitions.
|
||||
CQL3Listener.prototype.enterColumn_definitions = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#column_definitions.
|
||||
CQL3Listener.prototype.exitColumn_definitions = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#column_definition.
|
||||
CQL3Listener.prototype.enterColumn_definition = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#column_definition.
|
||||
CQL3Listener.prototype.exitColumn_definition = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#column_type.
|
||||
CQL3Listener.prototype.enterColumn_type = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#column_type.
|
||||
CQL3Listener.prototype.exitColumn_type = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#primary_key.
|
||||
CQL3Listener.prototype.enterPrimary_key = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#primary_key.
|
||||
CQL3Listener.prototype.exitPrimary_key = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#partition_key.
|
||||
CQL3Listener.prototype.enterPartition_key = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#partition_key.
|
||||
CQL3Listener.prototype.exitPartition_key = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#clustering_column.
|
||||
CQL3Listener.prototype.enterClustering_column = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#clustering_column.
|
||||
CQL3Listener.prototype.exitClustering_column = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#keyspace_name.
|
||||
CQL3Listener.prototype.enterKeyspace_name = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#keyspace_name.
|
||||
CQL3Listener.prototype.exitKeyspace_name = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#if_not_exists.
|
||||
CQL3Listener.prototype.enterIf_not_exists = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#if_not_exists.
|
||||
CQL3Listener.prototype.exitIf_not_exists = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#if_exists.
|
||||
CQL3Listener.prototype.enterIf_exists = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#if_exists.
|
||||
CQL3Listener.prototype.exitIf_exists = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#constant.
|
||||
CQL3Listener.prototype.enterConstant = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#constant.
|
||||
CQL3Listener.prototype.exitConstant = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#variable.
|
||||
CQL3Listener.prototype.enterVariable = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#variable.
|
||||
CQL3Listener.prototype.exitVariable = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#term.
|
||||
CQL3Listener.prototype.enterTerm = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#term.
|
||||
CQL3Listener.prototype.exitTerm = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#collection.
|
||||
CQL3Listener.prototype.enterCollection = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#collection.
|
||||
CQL3Listener.prototype.exitCollection = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#map.
|
||||
CQL3Listener.prototype.enterMap = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#map.
|
||||
CQL3Listener.prototype.exitMap = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#set.
|
||||
CQL3Listener.prototype.enterSet = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#set.
|
||||
CQL3Listener.prototype.exitSet = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#list.
|
||||
CQL3Listener.prototype.enterList = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#list.
|
||||
CQL3Listener.prototype.exitList = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#function.
|
||||
CQL3Listener.prototype.enterFunction = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#function.
|
||||
CQL3Listener.prototype.exitFunction = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#properties.
|
||||
CQL3Listener.prototype.enterProperties = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#properties.
|
||||
CQL3Listener.prototype.exitProperties = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#property.
|
||||
CQL3Listener.prototype.enterProperty = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#property.
|
||||
CQL3Listener.prototype.exitProperty = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#property_name.
|
||||
CQL3Listener.prototype.enterProperty_name = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#property_name.
|
||||
CQL3Listener.prototype.exitProperty_name = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#property_value.
|
||||
CQL3Listener.prototype.enterProperty_value = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#property_value.
|
||||
CQL3Listener.prototype.exitProperty_value = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#data_type.
|
||||
CQL3Listener.prototype.enterData_type = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#data_type.
|
||||
CQL3Listener.prototype.exitData_type = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#native_type.
|
||||
CQL3Listener.prototype.enterNative_type = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#native_type.
|
||||
CQL3Listener.prototype.exitNative_type = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#collection_type.
|
||||
CQL3Listener.prototype.enterCollection_type = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#collection_type.
|
||||
CQL3Listener.prototype.exitCollection_type = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Enter a parse tree produced by CQL3Parser#bool.
|
||||
CQL3Listener.prototype.enterBool = function(ctx) {
|
||||
};
|
||||
|
||||
// Exit a parse tree produced by CQL3Parser#bool.
|
||||
CQL3Listener.prototype.exitBool = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
|
||||
exports.CQL3Listener = CQL3Listener;
|
||||
7343
docsys/src/main/node/docsys/antlr/CQL3Parser.js
Normal file
7343
docsys/src/main/node/docsys/antlr/CQL3Parser.js
Normal file
File diff suppressed because it is too large
Load Diff
361
docsys/src/main/node/docsys/antlr/CQL3Visitor.js
Normal file
361
docsys/src/main/node/docsys/antlr/CQL3Visitor.js
Normal file
@@ -0,0 +1,361 @@
|
||||
// Generated from CQL3.g4 by ANTLR 4.5
|
||||
// jshint ignore: start
|
||||
var antlr4 = require('antlr4/index');
|
||||
|
||||
// This class defines a complete generic visitor for a parse tree produced by CQL3Parser.
|
||||
|
||||
function CQL3Visitor() {
|
||||
antlr4.tree.ParseTreeVisitor.call(this);
|
||||
return this;
|
||||
}
|
||||
|
||||
CQL3Visitor.prototype = Object.create(antlr4.tree.ParseTreeVisitor.prototype);
|
||||
CQL3Visitor.prototype.constructor = CQL3Visitor;
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#statements.
|
||||
CQL3Visitor.prototype.visitStatements = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#statement.
|
||||
CQL3Visitor.prototype.visitStatement = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#dml_statements.
|
||||
CQL3Visitor.prototype.visitDml_statements = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#dml_statement.
|
||||
CQL3Visitor.prototype.visitDml_statement = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#create_keyspace_stmt.
|
||||
CQL3Visitor.prototype.visitCreate_keyspace_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#alter_keyspace_stmt.
|
||||
CQL3Visitor.prototype.visitAlter_keyspace_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#drop_keyspace_stmt.
|
||||
CQL3Visitor.prototype.visitDrop_keyspace_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#use_stmt.
|
||||
CQL3Visitor.prototype.visitUse_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#create_table_stmt.
|
||||
CQL3Visitor.prototype.visitCreate_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#alter_table_stmt.
|
||||
CQL3Visitor.prototype.visitAlter_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#alter_table_instruction.
|
||||
CQL3Visitor.prototype.visitAlter_table_instruction = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#drop_table_stmt.
|
||||
CQL3Visitor.prototype.visitDrop_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#truncate_table_stmt.
|
||||
CQL3Visitor.prototype.visitTruncate_table_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#create_index_stmt.
|
||||
CQL3Visitor.prototype.visitCreate_index_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#drop_index_stmt.
|
||||
CQL3Visitor.prototype.visitDrop_index_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#insert_stmt.
|
||||
CQL3Visitor.prototype.visitInsert_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#column_names.
|
||||
CQL3Visitor.prototype.visitColumn_names = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#column_values.
|
||||
CQL3Visitor.prototype.visitColumn_values = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#upsert_options.
|
||||
CQL3Visitor.prototype.visitUpsert_options = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#upsert_option.
|
||||
CQL3Visitor.prototype.visitUpsert_option = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#index_name.
|
||||
CQL3Visitor.prototype.visitIndex_name = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#index_class.
|
||||
CQL3Visitor.prototype.visitIndex_class = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#index_options.
|
||||
CQL3Visitor.prototype.visitIndex_options = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#update_stmt.
|
||||
CQL3Visitor.prototype.visitUpdate_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#update_assignments.
|
||||
CQL3Visitor.prototype.visitUpdate_assignments = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#update_assignment.
|
||||
CQL3Visitor.prototype.visitUpdate_assignment = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#update_conditions.
|
||||
CQL3Visitor.prototype.visitUpdate_conditions = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#update_condition.
|
||||
CQL3Visitor.prototype.visitUpdate_condition = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#where_clause.
|
||||
CQL3Visitor.prototype.visitWhere_clause = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#relation.
|
||||
CQL3Visitor.prototype.visitRelation = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#delete_stmt.
|
||||
CQL3Visitor.prototype.visitDelete_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#delete_conditions.
|
||||
CQL3Visitor.prototype.visitDelete_conditions = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#delete_condition.
|
||||
CQL3Visitor.prototype.visitDelete_condition = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#delete_selections.
|
||||
CQL3Visitor.prototype.visitDelete_selections = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#delete_selection.
|
||||
CQL3Visitor.prototype.visitDelete_selection = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#batch_stmt.
|
||||
CQL3Visitor.prototype.visitBatch_stmt = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#batch_options.
|
||||
CQL3Visitor.prototype.visitBatch_options = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#batch_option.
|
||||
CQL3Visitor.prototype.visitBatch_option = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#table_name.
|
||||
CQL3Visitor.prototype.visitTable_name = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#table_name_noks.
|
||||
CQL3Visitor.prototype.visitTable_name_noks = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#column_name.
|
||||
CQL3Visitor.prototype.visitColumn_name = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#table_options.
|
||||
CQL3Visitor.prototype.visitTable_options = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#table_option.
|
||||
CQL3Visitor.prototype.visitTable_option = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#asc_or_desc.
|
||||
CQL3Visitor.prototype.visitAsc_or_desc = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#column_definitions.
|
||||
CQL3Visitor.prototype.visitColumn_definitions = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#column_definition.
|
||||
CQL3Visitor.prototype.visitColumn_definition = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#column_type.
|
||||
CQL3Visitor.prototype.visitColumn_type = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#primary_key.
|
||||
CQL3Visitor.prototype.visitPrimary_key = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#partition_key.
|
||||
CQL3Visitor.prototype.visitPartition_key = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#clustering_column.
|
||||
CQL3Visitor.prototype.visitClustering_column = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#keyspace_name.
|
||||
CQL3Visitor.prototype.visitKeyspace_name = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#if_not_exists.
|
||||
CQL3Visitor.prototype.visitIf_not_exists = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#if_exists.
|
||||
CQL3Visitor.prototype.visitIf_exists = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#constant.
|
||||
CQL3Visitor.prototype.visitConstant = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#variable.
|
||||
CQL3Visitor.prototype.visitVariable = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#term.
|
||||
CQL3Visitor.prototype.visitTerm = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#collection.
|
||||
CQL3Visitor.prototype.visitCollection = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#map.
|
||||
CQL3Visitor.prototype.visitMap = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#set.
|
||||
CQL3Visitor.prototype.visitSet = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#list.
|
||||
CQL3Visitor.prototype.visitList = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#function.
|
||||
CQL3Visitor.prototype.visitFunction = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#properties.
|
||||
CQL3Visitor.prototype.visitProperties = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#property.
|
||||
CQL3Visitor.prototype.visitProperty = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#property_name.
|
||||
CQL3Visitor.prototype.visitProperty_name = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#property_value.
|
||||
CQL3Visitor.prototype.visitProperty_value = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#data_type.
|
||||
CQL3Visitor.prototype.visitData_type = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#native_type.
|
||||
CQL3Visitor.prototype.visitNative_type = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#collection_type.
|
||||
CQL3Visitor.prototype.visitCollection_type = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
// Visit a parse tree produced by CQL3Parser#bool.
|
||||
CQL3Visitor.prototype.visitBool = function(ctx) {
|
||||
};
|
||||
|
||||
|
||||
|
||||
exports.CQL3Visitor = CQL3Visitor;
|
||||
248
docsys/src/main/node/docsys/antlr/CqlLexer.g4
Normal file
248
docsys/src/main/node/docsys/antlr/CqlLexer.g4
Normal file
@@ -0,0 +1,248 @@
|
||||
lexer grammar CqlLexer;
|
||||
|
||||
LR_BRACKET: '(';
|
||||
RR_BRACKET: ')';
|
||||
|
||||
LC_BRACKET: '{';
|
||||
RC_BRACKET: '}';
|
||||
|
||||
LS_BRACKET: '[';
|
||||
RS_BRACKET: ']';
|
||||
|
||||
COMMA: ',';
|
||||
SEMI: ';';
|
||||
COLON: ':';
|
||||
|
||||
DQUOTE: '"';
|
||||
SQUOTE: '\'';
|
||||
|
||||
SPACE: [ \t\r\n]+ -> channel(HIDDEN);
|
||||
SPEC_CQL_COMMENT: '/*!' .+? '*/' -> channel(HIDDEN);
|
||||
COMMENT_INPUT: '/*' .*? '*/' -> channel(HIDDEN);
|
||||
LINE_COMMENT: (
|
||||
('-- ' | '#' | '//') ~[\r\n]* ('\r'? '\n' | EOF)
|
||||
| '--' ('\r'? '\n' | EOF)
|
||||
) -> channel(HIDDEN);
|
||||
|
||||
DOT: '.';
|
||||
STAR: '*';
|
||||
DIVIDE: '/';
|
||||
MODULE: '%';
|
||||
PLUS: '+';
|
||||
MINUSMINUS: '--';
|
||||
MINUS: '-';
|
||||
|
||||
// Keywords
|
||||
K_ADD: A D D | 'ADD';
|
||||
K_AGGREGATE: A G G R E G A T E | 'AGGREGATE';
|
||||
K_ALL: A L L | 'ALL';
|
||||
K_ALL_ROLES: A L L R O L E S| 'ALL ROLES';
|
||||
K_ALL_KEYSPACES: A L L K E Y S P A C E S | 'ALL KEYSPACES';
|
||||
K_ALL_FUNCTIONS: A L L F U N C T I O N S| 'ALL FUNCTIONS';
|
||||
K_ALLOW: A L L O W | 'ALLOW';
|
||||
K_ALTER: A L T E R | 'ALTER';
|
||||
K_AND: A N D | 'AND';
|
||||
K_ANY: A N Y | 'ANY';
|
||||
K_APPLY: A P P L Y | 'APPLY';
|
||||
K_AS: A S | 'AS';
|
||||
K_ASC: A S C | 'ASC';
|
||||
K_AUTHORIZE: A U T H O R I Z E | 'AUTHORIZE';
|
||||
K_BATCH: B A T C H | 'BATCH';
|
||||
K_BEGIN: B E G I N | 'BEGIN';
|
||||
K_BY: B Y | 'BY';
|
||||
K_CALLED: C A L L E D | 'CALLED';
|
||||
K_CLUSTERING: C L U S T E R I N G | 'CLUSTERING';
|
||||
K_COLUMNFAMILY: C O L U M N F A M I L Y | 'COLUMNFAMILY';
|
||||
K_COMPACT: C O M P A C T | 'COMPACT';
|
||||
K_CONSISTENCY: C O N S I S T E N C Y | 'CONSISTENCY';
|
||||
K_CONTAINS: C O N T A I N S | 'CONTAINS';
|
||||
K_CREATE: C R E A T E | 'CREATE';
|
||||
K_CUSTOM: C U S T O M | 'CUSTOM';
|
||||
K_DELETE: D E L E T E | 'DELETE';
|
||||
K_DESC: D E S C | 'DESC';
|
||||
K_DESCRIBE: D E S C R I B E | 'DESCRIBE';
|
||||
K_DISTINCT: D I S T I N C T | 'DISTINCT';
|
||||
K_DROP: D R O P | 'DROP';
|
||||
K_DURABLE_WRITES: D U R A B L E '_' W R I T E S | 'DURABLE_WRITES';
|
||||
K_EACH_QUORUM: E A C H '_' Q U O R U M | 'EACH_QUORUM';
|
||||
K_ENTRIES: E N T R I E S | 'ENTRIES';
|
||||
K_EXECUTE: E X E C U T E | 'EXECUTE';
|
||||
K_EXISTS: E X I S T S | 'EXISTS';
|
||||
K_FALSE: F A L S E | 'FALSE';
|
||||
K_FILTERING: F I L T E R I N G | 'FILTERING';
|
||||
K_FINALFUNC: F I N A L F U N C | 'FINALFUNC';
|
||||
K_FROM: F R O M | 'FROM';
|
||||
K_FULL: F U L L | 'FULL';
|
||||
K_FUNCTION: F U N C T I O N | 'FUNCTION';
|
||||
K_GRANT: G R A N T | 'GRANT';
|
||||
K_IF: I F | 'IF';
|
||||
K_IN: I N | 'IN';
|
||||
K_INDEX: I N D E X | 'INDEX';
|
||||
K_INFINITY: I N F I N I T Y | 'INFINITY';
|
||||
K_INITCOND: I N I T C O N D | 'INITCOND';
|
||||
K_INPUT: I N P U T | 'INPUT';
|
||||
K_INSERT: I N S E R T | 'INSERT';
|
||||
K_INTO: I N T O | 'INTO';
|
||||
K_IS: I S | 'IS';
|
||||
K_KEY: K E Y | 'KEY';
|
||||
K_KEYS: K E Y S | 'KEYS';
|
||||
K_KEYSPACE: K E Y S P A C E | 'KEYSPACE';
|
||||
K_LANGUAGE: L A N G U A G E | 'LANGUAGE';
|
||||
K_LEVEL: L E V E L | 'LEVEL';
|
||||
K_LIMIT: L I M I T | 'LIMIT';
|
||||
K_LOCAL_ONE: L O C A L '_' O N E | 'LOCAL_ONE';
|
||||
K_LOCAL_QUORUM: L O C A L '_' Q U O R U M | 'LOCAL_QUORUM';
|
||||
K_LOGGED: L O G G E D | 'LOGGED';
|
||||
K_LOGIN: L O G I N | 'LOGIN';
|
||||
K_MATERIALIZED: M A T E R I A L I Z E D | 'MATERIALIZED';
|
||||
K_MODIFY: M O D I F Y | 'MODIFY';
|
||||
K_NAN: N A N | 'NAN';
|
||||
K_NORECURSIVE: N O R E C U R S I V E | 'NORECURSIVE';
|
||||
K_NOSUPERUSER: N O S U P E R U S E R | 'NOSUPERUSER';
|
||||
K_NOT: N O T | 'NOT';
|
||||
K_NULL: N U L L | 'NULL';
|
||||
K_OF: O F | 'OF';
|
||||
K_ON: O N | 'ON';
|
||||
K_ONE: O N E | 'ONE';
|
||||
K_OPTIONS: O P T I O N S | 'OPTIONS';
|
||||
K_OR: O R | 'OR';
|
||||
K_ORDER: O R D E R | 'ORDER';
|
||||
K_PARTITION: P A R T I T I O N | 'PARTITION';
|
||||
K_PASSWORD: P A S S W O R D | 'PASSWORD';
|
||||
K_PER: P E R | 'PER';
|
||||
K_PERMISSION: P E R M I S S I O N | 'PERMISSION';
|
||||
K_PERMISSIONS: P E R M I S S I O N S | 'PERMISSIONS';
|
||||
K_PRIMARY: P R I M A R Y | 'PRIMARY';
|
||||
K_QUORUM: Q U O R U M | 'QUORUM';
|
||||
K_RENAME: R E N A M E | 'RENAME';
|
||||
K_REPLACE: R E P L A C E | 'REPLACE';
|
||||
K_REPLICATION: R E P L I C A T I O N | 'REPLICATION';
|
||||
K_RETURNS: R E T U R N S | 'RETURNS';
|
||||
K_REVOKE: R E V O K E | 'REVOKE';
|
||||
|
||||
K_SCHEMA: S C H E M A | 'SCHEMA';
|
||||
K_SELECT: S E L E C T | 'SELECT';
|
||||
K_SET: S E T | 'SET';
|
||||
K_SFUNC: S F U N C | 'SFUNC';
|
||||
K_STATIC: S T A T I C | 'STATIC';
|
||||
K_STORAGE: S T O R A G E | 'STORAGE';
|
||||
K_STYPE: S T Y P E | 'STYPE';
|
||||
K_SUPERUSER: S U P E R U S E R | 'SUPERUSER';
|
||||
K_TABLE: T A B L E | 'TABLE';
|
||||
K_THREE: T H R E E | 'THREE';
|
||||
K_TIMESTAMP: T I M E S T A M P | 'TIMESTAMP';
|
||||
K_TO: T O | 'TO';
|
||||
K_TOKEN: T O K E N | 'TOKEN';
|
||||
K_TRIGGER: T R I G G E R | 'TRIGGER';
|
||||
K_TRUE: T R U E | 'TRUE';
|
||||
K_TRUNCATE: T R U N C A T E | 'TRUNCATE';
|
||||
K_TTL: T T L | 'TTL';
|
||||
K_TWO: T W O | 'TWO';
|
||||
K_TYPE: T Y P E | 'TYPE';
|
||||
K_UNLOGGED: U N L O G G E D | 'UNLOGGED';
|
||||
K_UPDATE: U P D A T E | 'UPDATE';
|
||||
K_USE: U S E | 'USE';
|
||||
K_USING: U S I N G | 'USING';
|
||||
K_VALUES: V A L U E S | 'VALUES';
|
||||
K_VIEW: V I E W | 'VIEW';
|
||||
K_WHERE: W H E R E | 'WHERE';
|
||||
K_WITH: W I T H | 'WITH';
|
||||
K_WRITETIME: W R I T E T I M E | 'WRITETIME';
|
||||
|
||||
K_ASCII: A S C I I | 'ASCII';
|
||||
K_BIGINT: B I G I N T | 'BIGINT';
|
||||
K_BLOB: B L O B | 'BLOB';
|
||||
K_BOOLEAN: B O O L E A N | 'BOOLEAN';
|
||||
K_COUNTER: C O U N T E R | 'COUNTER';
|
||||
K_DATE: D A T E | 'DATE';
|
||||
K_DECIMAL: D E C I M A L | 'DECIMAL';
|
||||
K_DOUBLE: D O U B L E | 'DOUBLE';
|
||||
K_FLOAT: F L O A T | 'FLOAT';
|
||||
K_FROZEN: F R O Z E N | 'FROZEN';
|
||||
K_INET: I N E T | 'INET';
|
||||
K_INT: I N T | 'INT';
|
||||
K_LIST: L I S T;
|
||||
K_ROLES: R O L E S;
|
||||
K_ROLE: R O L E;
|
||||
|
||||
K_MAP: M A P | 'MAP';
|
||||
K_SMALLINT: S M A L L I N T | 'SMALLINT';
|
||||
K_TEXT: T E X T | 'TEXT';
|
||||
K_TIMEUUID: T I M E U U I D | 'TIMEUUID';
|
||||
K_TIME: T I M E | 'TIME';
|
||||
K_TINYINT: T I N Y I N T | 'TINYINT';
|
||||
K_TUPLE: T U P L E | 'TUPLE';
|
||||
K_UUID: U U I D | 'UUID';
|
||||
K_VARCHAR: V A R C H A R | 'VARCHAR';
|
||||
K_VARINT: V A R I N T | 'VARINT';
|
||||
|
||||
K_USERS: U S E R S | 'USERS';
|
||||
K_USER: U S E R | 'USER';
|
||||
|
||||
fragment A : [aA]; // match either an 'a' or 'A'
|
||||
fragment B : [bB];
|
||||
fragment C : [cC];
|
||||
fragment D : [dD];
|
||||
fragment E : [eE];
|
||||
fragment F : [fF];
|
||||
fragment G : [gG];
|
||||
fragment H : [hH];
|
||||
fragment I : [iI];
|
||||
fragment J : [jJ];
|
||||
fragment K : [kK];
|
||||
fragment L : [lL];
|
||||
fragment M : [mM];
|
||||
fragment N : [nN];
|
||||
fragment O : [oO];
|
||||
fragment P : [pP];
|
||||
fragment Q : [qQ];
|
||||
fragment R : [rR];
|
||||
fragment S : [sS];
|
||||
fragment T : [tT];
|
||||
fragment U : [uU];
|
||||
fragment V : [vV];
|
||||
fragment W : [wW];
|
||||
fragment X : [xX];
|
||||
fragment Y : [yY];
|
||||
fragment Z : [zZ];
|
||||
|
||||
fragment CODE_BLOCK_DELIMITER: '$$';
|
||||
fragment CODE_BLOCK_FRAG: '$$' ( ~'$' | ( '$' ~('$') ))* '$$';
|
||||
// CODE_BLOCK_FRAG: '$$' .*? '$$';
|
||||
fragment HEX_4DIGIT: [0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F];
|
||||
fragment OBJECT_NAME_FRAG: [a-zA-Z][A-Za-z0-9_$]*;
|
||||
fragment SQUOTA_STRING: '\'' ('\\' . | '\'\'' | ~('\'' | '\\'))* '\'';
|
||||
|
||||
CODE_BLOCK: CODE_BLOCK_FRAG;
|
||||
STRING_LITERAL: SQUOTA_STRING;
|
||||
DECIMAL_LITERAL: DEC_DIGIT+;
|
||||
FLOAT_LITERAL: (MINUS)? [0-9]+(DOT [0-9]+)?;
|
||||
HEXADECIMAL_LITERAL
|
||||
: 'X' '\'' (HEX_DIGIT HEX_DIGIT)+ '\''
|
||||
| '0X' HEX_DIGIT+;
|
||||
|
||||
REAL_LITERAL
|
||||
: (DEC_DIGIT+)? '.' DEC_DIGIT+
|
||||
| DEC_DIGIT+ '.' EXPONENT_NUM_PART
|
||||
| (DEC_DIGIT+)? '.' (DEC_DIGIT+ EXPONENT_NUM_PART)
|
||||
| DEC_DIGIT+ EXPONENT_NUM_PART;
|
||||
|
||||
OBJECT_NAME: OBJECT_NAME_FRAG;
|
||||
|
||||
UUID: HEX_4DIGIT HEX_4DIGIT '-' HEX_4DIGIT '-' HEX_4DIGIT '-' HEX_4DIGIT '-' HEX_4DIGIT HEX_4DIGIT HEX_4DIGIT;
|
||||
|
||||
fragment HEX_DIGIT: [0-9A-F];
|
||||
fragment DEC_DIGIT: [0-9];
|
||||
fragment EXPONENT_NUM_PART: 'E' '-'? DEC_DIGIT+;
|
||||
|
||||
fragment OPERATOR_EQ_FRAG: '=';
|
||||
fragment OPERATOR_LT_FRAG: '<';
|
||||
fragment OPERATOR_GT_FRAG: '>';
|
||||
fragment OPERATOR_GTE_FRAG: '>=';
|
||||
fragment OPERATOR_LTE_FRAG: '<=';
|
||||
|
||||
OPERATOR_EQ: OPERATOR_EQ_FRAG;
|
||||
OPERATOR_LT: OPERATOR_LT_FRAG;
|
||||
OPERATOR_GT: OPERATOR_GT_FRAG;
|
||||
OPERATOR_LTE: OPERATOR_LTE_FRAG;
|
||||
OPERATOR_GTE: OPERATOR_GTE_FRAG;
|
||||
1499
docsys/src/main/node/docsys/antlr/CqlLexer.js
Normal file
1499
docsys/src/main/node/docsys/antlr/CqlLexer.js
Normal file
File diff suppressed because it is too large
Load Diff
194
docsys/src/main/node/docsys/antlr/CqlLexer.tokens
Normal file
194
docsys/src/main/node/docsys/antlr/CqlLexer.tokens
Normal file
@@ -0,0 +1,194 @@
|
||||
LR_BRACKET=1
|
||||
RR_BRACKET=2
|
||||
LC_BRACKET=3
|
||||
RC_BRACKET=4
|
||||
LS_BRACKET=5
|
||||
RS_BRACKET=6
|
||||
COMMA=7
|
||||
SEMI=8
|
||||
COLON=9
|
||||
DQUOTE=10
|
||||
SQUOTE=11
|
||||
SPACE=12
|
||||
SPEC_CQL_COMMENT=13
|
||||
COMMENT_INPUT=14
|
||||
LINE_COMMENT=15
|
||||
DOT=16
|
||||
STAR=17
|
||||
DIVIDE=18
|
||||
MODULE=19
|
||||
PLUS=20
|
||||
MINUSMINUS=21
|
||||
MINUS=22
|
||||
K_ADD=23
|
||||
K_AGGREGATE=24
|
||||
K_ALL=25
|
||||
K_ALL_ROLES=26
|
||||
K_ALL_KEYSPACES=27
|
||||
K_ALL_FUNCTIONS=28
|
||||
K_ALLOW=29
|
||||
K_ALTER=30
|
||||
K_AND=31
|
||||
K_ANY=32
|
||||
K_APPLY=33
|
||||
K_AS=34
|
||||
K_ASC=35
|
||||
K_AUTHORIZE=36
|
||||
K_BATCH=37
|
||||
K_BEGIN=38
|
||||
K_BY=39
|
||||
K_CALLED=40
|
||||
K_CLUSTERING=41
|
||||
K_COLUMNFAMILY=42
|
||||
K_COMPACT=43
|
||||
K_CONSISTENCY=44
|
||||
K_CONTAINS=45
|
||||
K_CREATE=46
|
||||
K_CUSTOM=47
|
||||
K_DELETE=48
|
||||
K_DESC=49
|
||||
K_DESCRIBE=50
|
||||
K_DISTINCT=51
|
||||
K_DROP=52
|
||||
K_DURABLE_WRITES=53
|
||||
K_EACH_QUORUM=54
|
||||
K_ENTRIES=55
|
||||
K_EXECUTE=56
|
||||
K_EXISTS=57
|
||||
K_FALSE=58
|
||||
K_FILTERING=59
|
||||
K_FINALFUNC=60
|
||||
K_FROM=61
|
||||
K_FULL=62
|
||||
K_FUNCTION=63
|
||||
K_GRANT=64
|
||||
K_IF=65
|
||||
K_IN=66
|
||||
K_INDEX=67
|
||||
K_INFINITY=68
|
||||
K_INITCOND=69
|
||||
K_INPUT=70
|
||||
K_INSERT=71
|
||||
K_INTO=72
|
||||
K_IS=73
|
||||
K_KEY=74
|
||||
K_KEYS=75
|
||||
K_KEYSPACE=76
|
||||
K_LANGUAGE=77
|
||||
K_LEVEL=78
|
||||
K_LIMIT=79
|
||||
K_LOCAL_ONE=80
|
||||
K_LOCAL_QUORUM=81
|
||||
K_LOGGED=82
|
||||
K_LOGIN=83
|
||||
K_MATERIALIZED=84
|
||||
K_MODIFY=85
|
||||
K_NAN=86
|
||||
K_NORECURSIVE=87
|
||||
K_NOSUPERUSER=88
|
||||
K_NOT=89
|
||||
K_NULL=90
|
||||
K_OF=91
|
||||
K_ON=92
|
||||
K_ONE=93
|
||||
K_OPTIONS=94
|
||||
K_OR=95
|
||||
K_ORDER=96
|
||||
K_PARTITION=97
|
||||
K_PASSWORD=98
|
||||
K_PER=99
|
||||
K_PERMISSION=100
|
||||
K_PERMISSIONS=101
|
||||
K_PRIMARY=102
|
||||
K_QUORUM=103
|
||||
K_RENAME=104
|
||||
K_REPLACE=105
|
||||
K_REPLICATION=106
|
||||
K_RETURNS=107
|
||||
K_REVOKE=108
|
||||
K_SCHEMA=109
|
||||
K_SELECT=110
|
||||
K_SET=111
|
||||
K_SFUNC=112
|
||||
K_STATIC=113
|
||||
K_STORAGE=114
|
||||
K_STYPE=115
|
||||
K_SUPERUSER=116
|
||||
K_TABLE=117
|
||||
K_THREE=118
|
||||
K_TIMESTAMP=119
|
||||
K_TO=120
|
||||
K_TOKEN=121
|
||||
K_TRIGGER=122
|
||||
K_TRUE=123
|
||||
K_TRUNCATE=124
|
||||
K_TTL=125
|
||||
K_TWO=126
|
||||
K_TYPE=127
|
||||
K_UNLOGGED=128
|
||||
K_UPDATE=129
|
||||
K_USE=130
|
||||
K_USING=131
|
||||
K_VALUES=132
|
||||
K_VIEW=133
|
||||
K_WHERE=134
|
||||
K_WITH=135
|
||||
K_WRITETIME=136
|
||||
K_ASCII=137
|
||||
K_BIGINT=138
|
||||
K_BLOB=139
|
||||
K_BOOLEAN=140
|
||||
K_COUNTER=141
|
||||
K_DATE=142
|
||||
K_DECIMAL=143
|
||||
K_DOUBLE=144
|
||||
K_FLOAT=145
|
||||
K_FROZEN=146
|
||||
K_INET=147
|
||||
K_INT=148
|
||||
K_LIST=149
|
||||
K_ROLES=150
|
||||
K_ROLE=151
|
||||
K_MAP=152
|
||||
K_SMALLINT=153
|
||||
K_TEXT=154
|
||||
K_TIMEUUID=155
|
||||
K_TIME=156
|
||||
K_TINYINT=157
|
||||
K_TUPLE=158
|
||||
K_UUID=159
|
||||
K_VARCHAR=160
|
||||
K_VARINT=161
|
||||
K_USERS=162
|
||||
K_USER=163
|
||||
CODE_BLOCK=164
|
||||
STRING_LITERAL=165
|
||||
DECIMAL_LITERAL=166
|
||||
FLOAT_LITERAL=167
|
||||
HEXADECIMAL_LITERAL=168
|
||||
REAL_LITERAL=169
|
||||
OBJECT_NAME=170
|
||||
UUID=171
|
||||
OPERATOR_EQ=172
|
||||
OPERATOR_LT=173
|
||||
OPERATOR_GT=174
|
||||
OPERATOR_LTE=175
|
||||
OPERATOR_GTE=176
|
||||
'('=1
|
||||
')'=2
|
||||
'{'=3
|
||||
'}'=4
|
||||
'['=5
|
||||
']'=6
|
||||
','=7
|
||||
';'=8
|
||||
':'=9
|
||||
'"'=10
|
||||
'\''=11
|
||||
'.'=16
|
||||
'*'=17
|
||||
'/'=18
|
||||
'%'=19
|
||||
'+'=20
|
||||
'--'=21
|
||||
'-'=22
|
||||
1218
docsys/src/main/node/docsys/antlr/CqlParser.g4
Normal file
1218
docsys/src/main/node/docsys/antlr/CqlParser.g4
Normal file
File diff suppressed because it is too large
Load Diff
34455
docsys/src/main/node/docsys/antlr/CqlParser.js
Normal file
34455
docsys/src/main/node/docsys/antlr/CqlParser.js
Normal file
File diff suppressed because it is too large
Load Diff
194
docsys/src/main/node/docsys/antlr/CqlParser.tokens
Normal file
194
docsys/src/main/node/docsys/antlr/CqlParser.tokens
Normal file
@@ -0,0 +1,194 @@
|
||||
LR_BRACKET=1
|
||||
RR_BRACKET=2
|
||||
LC_BRACKET=3
|
||||
RC_BRACKET=4
|
||||
LS_BRACKET=5
|
||||
RS_BRACKET=6
|
||||
COMMA=7
|
||||
SEMI=8
|
||||
COLON=9
|
||||
DQUOTE=10
|
||||
SQUOTE=11
|
||||
SPACE=12
|
||||
SPEC_CQL_COMMENT=13
|
||||
COMMENT_INPUT=14
|
||||
LINE_COMMENT=15
|
||||
DOT=16
|
||||
STAR=17
|
||||
DIVIDE=18
|
||||
MODULE=19
|
||||
PLUS=20
|
||||
MINUSMINUS=21
|
||||
MINUS=22
|
||||
K_ADD=23
|
||||
K_AGGREGATE=24
|
||||
K_ALL=25
|
||||
K_ALL_ROLES=26
|
||||
K_ALL_KEYSPACES=27
|
||||
K_ALL_FUNCTIONS=28
|
||||
K_ALLOW=29
|
||||
K_ALTER=30
|
||||
K_AND=31
|
||||
K_ANY=32
|
||||
K_APPLY=33
|
||||
K_AS=34
|
||||
K_ASC=35
|
||||
K_AUTHORIZE=36
|
||||
K_BATCH=37
|
||||
K_BEGIN=38
|
||||
K_BY=39
|
||||
K_CALLED=40
|
||||
K_CLUSTERING=41
|
||||
K_COLUMNFAMILY=42
|
||||
K_COMPACT=43
|
||||
K_CONSISTENCY=44
|
||||
K_CONTAINS=45
|
||||
K_CREATE=46
|
||||
K_CUSTOM=47
|
||||
K_DELETE=48
|
||||
K_DESC=49
|
||||
K_DESCRIBE=50
|
||||
K_DISTINCT=51
|
||||
K_DROP=52
|
||||
K_DURABLE_WRITES=53
|
||||
K_EACH_QUORUM=54
|
||||
K_ENTRIES=55
|
||||
K_EXECUTE=56
|
||||
K_EXISTS=57
|
||||
K_FALSE=58
|
||||
K_FILTERING=59
|
||||
K_FINALFUNC=60
|
||||
K_FROM=61
|
||||
K_FULL=62
|
||||
K_FUNCTION=63
|
||||
K_GRANT=64
|
||||
K_IF=65
|
||||
K_IN=66
|
||||
K_INDEX=67
|
||||
K_INFINITY=68
|
||||
K_INITCOND=69
|
||||
K_INPUT=70
|
||||
K_INSERT=71
|
||||
K_INTO=72
|
||||
K_IS=73
|
||||
K_KEY=74
|
||||
K_KEYS=75
|
||||
K_KEYSPACE=76
|
||||
K_LANGUAGE=77
|
||||
K_LEVEL=78
|
||||
K_LIMIT=79
|
||||
K_LOCAL_ONE=80
|
||||
K_LOCAL_QUORUM=81
|
||||
K_LOGGED=82
|
||||
K_LOGIN=83
|
||||
K_MATERIALIZED=84
|
||||
K_MODIFY=85
|
||||
K_NAN=86
|
||||
K_NORECURSIVE=87
|
||||
K_NOSUPERUSER=88
|
||||
K_NOT=89
|
||||
K_NULL=90
|
||||
K_OF=91
|
||||
K_ON=92
|
||||
K_ONE=93
|
||||
K_OPTIONS=94
|
||||
K_OR=95
|
||||
K_ORDER=96
|
||||
K_PARTITION=97
|
||||
K_PASSWORD=98
|
||||
K_PER=99
|
||||
K_PERMISSION=100
|
||||
K_PERMISSIONS=101
|
||||
K_PRIMARY=102
|
||||
K_QUORUM=103
|
||||
K_RENAME=104
|
||||
K_REPLACE=105
|
||||
K_REPLICATION=106
|
||||
K_RETURNS=107
|
||||
K_REVOKE=108
|
||||
K_SCHEMA=109
|
||||
K_SELECT=110
|
||||
K_SET=111
|
||||
K_SFUNC=112
|
||||
K_STATIC=113
|
||||
K_STORAGE=114
|
||||
K_STYPE=115
|
||||
K_SUPERUSER=116
|
||||
K_TABLE=117
|
||||
K_THREE=118
|
||||
K_TIMESTAMP=119
|
||||
K_TO=120
|
||||
K_TOKEN=121
|
||||
K_TRIGGER=122
|
||||
K_TRUE=123
|
||||
K_TRUNCATE=124
|
||||
K_TTL=125
|
||||
K_TWO=126
|
||||
K_TYPE=127
|
||||
K_UNLOGGED=128
|
||||
K_UPDATE=129
|
||||
K_USE=130
|
||||
K_USING=131
|
||||
K_VALUES=132
|
||||
K_VIEW=133
|
||||
K_WHERE=134
|
||||
K_WITH=135
|
||||
K_WRITETIME=136
|
||||
K_ASCII=137
|
||||
K_BIGINT=138
|
||||
K_BLOB=139
|
||||
K_BOOLEAN=140
|
||||
K_COUNTER=141
|
||||
K_DATE=142
|
||||
K_DECIMAL=143
|
||||
K_DOUBLE=144
|
||||
K_FLOAT=145
|
||||
K_FROZEN=146
|
||||
K_INET=147
|
||||
K_INT=148
|
||||
K_LIST=149
|
||||
K_ROLES=150
|
||||
K_ROLE=151
|
||||
K_MAP=152
|
||||
K_SMALLINT=153
|
||||
K_TEXT=154
|
||||
K_TIMEUUID=155
|
||||
K_TIME=156
|
||||
K_TINYINT=157
|
||||
K_TUPLE=158
|
||||
K_UUID=159
|
||||
K_VARCHAR=160
|
||||
K_VARINT=161
|
||||
K_USERS=162
|
||||
K_USER=163
|
||||
CODE_BLOCK=164
|
||||
STRING_LITERAL=165
|
||||
DECIMAL_LITERAL=166
|
||||
FLOAT_LITERAL=167
|
||||
HEXADECIMAL_LITERAL=168
|
||||
REAL_LITERAL=169
|
||||
OBJECT_NAME=170
|
||||
UUID=171
|
||||
OPERATOR_EQ=172
|
||||
OPERATOR_LT=173
|
||||
OPERATOR_GT=174
|
||||
OPERATOR_LTE=175
|
||||
OPERATOR_GTE=176
|
||||
'('=1
|
||||
')'=2
|
||||
'{'=3
|
||||
'}'=4
|
||||
'['=5
|
||||
']'=6
|
||||
','=7
|
||||
';'=8
|
||||
':'=9
|
||||
'"'=10
|
||||
'\''=11
|
||||
'.'=16
|
||||
'*'=17
|
||||
'/'=18
|
||||
'%'=19
|
||||
'+'=20
|
||||
'--'=21
|
||||
'-'=22
|
||||
3174
docsys/src/main/node/docsys/antlr/CqlParserListener.js
Normal file
3174
docsys/src/main/node/docsys/antlr/CqlParserListener.js
Normal file
File diff suppressed because it is too large
Load Diff
1771
docsys/src/main/node/docsys/antlr/CqlParserVisitor.js
Normal file
1771
docsys/src/main/node/docsys/antlr/CqlParserVisitor.js
Normal file
File diff suppressed because it is too large
Load Diff
23
docsys/src/main/node/docsys/assets/basictypes.yaml
Normal file
23
docsys/src/main/node/docsys/assets/basictypes.yaml
Normal file
@@ -0,0 +1,23 @@
|
||||
bindings:
|
||||
partition: Div(<<partitions:10>>) -> long
|
||||
cluster: Mod(<<clusters:10>>) -> long
|
||||
cycle: Identity() -> long
|
||||
asciival: NumberNameToString()
|
||||
varcharval: NumberNameToString()
|
||||
textval: NumberNameToString()
|
||||
bigintval: Identity() -> long
|
||||
blobval: HashedToByteBuffer(1024)
|
||||
booleanval: ModuloToBoolean()
|
||||
decimalval: ModuloToBigDecimal(9223372036854775807L)
|
||||
doubleval: Pareto(1.161,5.0) -> double
|
||||
floatval: compose Normal(15.0,3.0); ToFloat();
|
||||
inetval: ToInetAddress()
|
||||
intval: ToInt()
|
||||
timestampval: ToDate()
|
||||
uuidval: ToEpochTimeUUID('2017-01-01 23:59:59')
|
||||
timeuuidval: ToFinestTimeUUID('2017-12-31 23:59:59',123,456) # tuuid node data 123 and tuuid clock data 456
|
||||
varintval: ModuloToBigInt(50000) -> BigInteger
|
||||
tinyintval: LongToByte()
|
||||
smallintval: LongToShort()
|
||||
dateval: LongToLocalDateDays()
|
||||
timeval: Identity()
|
||||
86
docsys/src/main/node/docsys/assets/default.yaml
Normal file
86
docsys/src/main/node/docsys/assets/default.yaml
Normal file
@@ -0,0 +1,86 @@
|
||||
description: |
|
||||
Use case for
|
||||
scenarios:
|
||||
default:
|
||||
- run driver=cql tags==phase:schema threads==1 cycles==UNDEF
|
||||
- run driver=cql tags==phase:rampup cycles===TEMPLATE(rampup-cycles,10000000) threads=1000
|
||||
- run driver=cql tags==phase:main cycles===TEMPLATE(main-cycles,10000000) threads=1000
|
||||
main:
|
||||
- run driver=cql tags==phase:main cycles===TEMPLATE(main-cycles,10000000) threads=1000
|
||||
|
||||
bindings:
|
||||
version: Hash(); Identity() -> long
|
||||
|
||||
|
||||
blocks:
|
||||
- tags:
|
||||
phase: schema
|
||||
params:
|
||||
prepared: false
|
||||
statements:
|
||||
- create-table : |
|
||||
CREATE TABLE IF NOT EXISTS <<keyspace:test>>.a (
|
||||
a text,
|
||||
PRIMARY KEY (a)
|
||||
);
|
||||
|
||||
- tags:
|
||||
phase: rampup
|
||||
params:
|
||||
cl: <<write_cl:LOCAL_QUORUM>>
|
||||
instrument: true
|
||||
statements:
|
||||
- insert-rampup: |
|
||||
insert into <<keyspace:test>>.a
|
||||
(
|
||||
a
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
{a}
|
||||
)
|
||||
|
||||
idempotent: true
|
||||
- tags:
|
||||
phase: main
|
||||
type: write
|
||||
params:
|
||||
ratio: <<write_ratio:1>>
|
||||
cl: <<write_cl:LOCAL_QUORUM>>
|
||||
instrument: true
|
||||
statements:
|
||||
- insert-main: |
|
||||
insert into <<keyspace:test>>.a
|
||||
(
|
||||
a
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
{a}
|
||||
)
|
||||
|
||||
- tags:
|
||||
phase: main
|
||||
type: read
|
||||
params:
|
||||
ratio: <<read_partition_ratio:1>>
|
||||
cl: <<read_cl:LOCAL_QUORUM>>
|
||||
instrument: true
|
||||
statements:
|
||||
- read-partition: |
|
||||
select * from <<keyspace:test>>.a
|
||||
where
|
||||
a = {a}
|
||||
limit <<limit:1000>>;
|
||||
- tags:
|
||||
phase: main
|
||||
type: read
|
||||
params:
|
||||
ratio: <<read_row_ratio:1>>
|
||||
cl: <<read_cl:LOCAL_QUORUM>>
|
||||
instrument: true
|
||||
statements:
|
||||
- read-row: |
|
||||
select * from <<keyspace:test>>.a
|
||||
where
|
||||
a= {a};
|
||||
32
docsys/src/main/node/docsys/components/AppSelector.vue
Normal file
32
docsys/src/main/node/docsys/components/AppSelector.vue
Normal file
@@ -0,0 +1,32 @@
|
||||
<template>
|
||||
<div class="d-flex align-center ma-2 pa-1 text-center">
|
||||
|
||||
<v-btn to="/ui/build/" title="Build a workload from a schema">Build</v-btn>
|
||||
<v-btn to="/ui/run/" title="Run a workload">Run</v-btn>
|
||||
<v-btn to="/ui/watch/" title="Watch workload status">Watch</v-btn>
|
||||
<v-btn to="/docs/" title="Documentation">Docs</v-btn>
|
||||
<v-btn
|
||||
title="Give us your feedback!"
|
||||
href="https://github.com/nosqlbench/nosqlbench/wiki/Submitting-Feedback">
|
||||
<v-icon>mdi-lightbulb-on-outline</v-icon>
|
||||
</v-btn>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'app-selector',
|
||||
data() {
|
||||
let data = {
|
||||
empty: [],
|
||||
apps: ['build', 'run', 'status', 'workspaces'],
|
||||
thisapp: 'build'
|
||||
};
|
||||
return data;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
@@ -1,133 +1,148 @@
|
||||
<template>
|
||||
<v-navigation-drawer v-model="drawer" :permanent="lockmenu" @transitionend="setDrawer" app class="secondary">
|
||||
<v-navigation-drawer app
|
||||
v-model="isDrawerOpen"
|
||||
:permanent="isMenuLocked"
|
||||
@transitionend="toggleDrawerOpened"
|
||||
:title="drawerTitle">
|
||||
|
||||
<div class="menu">
|
||||
<!-- active_category: {{active_category}} active_topic: {{active_topic}}-->
|
||||
<div class="menu">
|
||||
|
||||
<!-- Use active_category and active_topic to select inactive -->
|
||||
<!-- active_category: {{ active_category.name }} active_topic: {{ active_topic.name }}-->
|
||||
<!-- Use active_category and active_topic to select inactive -->
|
||||
|
||||
<v-list nav dense>
|
||||
<v-list nav dense>
|
||||
|
||||
<!-- KEEP OPEN -->
|
||||
<v-list-item v-if="$vuetify.breakpoint.mdAndDown">
|
||||
<v-list-item-action>
|
||||
<v-switch inset dark color="accent" v-model="lockmenu" label="keep open"
|
||||
@change="setLockMenu"></v-switch>
|
||||
</v-list-item-action>
|
||||
</v-list-item>
|
||||
<!-- KEEP OPEN -->
|
||||
<v-list-item>
|
||||
<!-- <v-list-item v-if="$vuetify.breakpoint.mdAndDown">-->
|
||||
<v-list-item-action>
|
||||
<v-switch inset v-model="isMenuLocked" label="keep open"
|
||||
@change="toggleMenuLocked"></v-switch>
|
||||
</v-list-item-action>
|
||||
</v-list-item>
|
||||
|
||||
<!-- by category -->
|
||||
<v-list-group v-for="(category,c) in categories" :key="c"
|
||||
:value="active_category === category.category" active-class="isactive">
|
||||
<!-- <nuxt-link :to="{path: category.category}">foo</nuxt-link>-->
|
||||
<!-- <router-link :to="{path: category.category+'.html'}">-->
|
||||
<template v-slot:activator>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title @click="$nuxt.$router.push({path: category.category})">
|
||||
{{category.categoryName}}
|
||||
</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</template>
|
||||
<!-- </router-link>-->
|
||||
<v-list-item v-for="(doc, i) in category.docs" :key="i" link :to="doc.filename">
|
||||
<!-- <router-link :to="{ name: 'docs-slug', params: {lockmenu:lockmenu}}">-->
|
||||
<!-- <router-link :to="{ path: doc.filename}">-->
|
||||
<v-list-item-title @click="$nuxt.$router.push({path: doc.filename})">{{doc.attributes.title}}</v-list-item-title>
|
||||
<!-- </router-link>-->
|
||||
</v-list-item>
|
||||
<!-- by category -->
|
||||
<v-list-group v-for="(category,c) in categories" :key="c"
|
||||
:value="active_category.title === category.title" active-class="isactive">
|
||||
<template v-slot:activator>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title link :to="category.path">{{ category.title }}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</template>
|
||||
|
||||
</v-list-group>
|
||||
</v-list>
|
||||
<!-- by topic -->
|
||||
<v-list-item v-for="(topic, i) in category.topics" :key="i" link :to="topic.path">
|
||||
<v-list-item-title>{{ topic.title }}</v-list-item-title>
|
||||
</v-list-item>
|
||||
|
||||
</div>
|
||||
</v-navigation-drawer>
|
||||
</v-list-group>
|
||||
</v-list>
|
||||
|
||||
</div>
|
||||
</v-navigation-drawer>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: 'DocsMenu',
|
||||
props: {
|
||||
categories: Array,
|
||||
active_category: String,
|
||||
active_topic: String
|
||||
},
|
||||
data(context) {
|
||||
let lockmenu = this.$store.state.docs.isDrawerPinned;
|
||||
if (lockmenu == null) {
|
||||
lockmenu = false
|
||||
}
|
||||
console.log("data says context is: " + context);
|
||||
// console.log("g says" + this.$getters.docs.drawerState);
|
||||
return {
|
||||
lockmenu: lockmenu,
|
||||
drawer: null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
setLockMenu() {
|
||||
this.$store.commit('docs/setMenuLock', this.lockmenu);
|
||||
},
|
||||
setDrawer() {
|
||||
this.$store.commit('docs/setDrawer', this.drawer);
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.setDrawer();
|
||||
this.$store.subscribe((mutation, state) => {
|
||||
console.log("mutation type " + mutation.type);
|
||||
if (mutation.type === 'docs/toggleDrawerState') {
|
||||
this.drawer = this.$store.state.docs.isDrawerOpen;
|
||||
} else if (mutation.type === 'docs/setMenuLock') {
|
||||
this.lockmenu = this.$store.state.docs.isDrawerPinned;
|
||||
}
|
||||
});
|
||||
}
|
||||
// computed: {
|
||||
// drawerState() {
|
||||
// console.log("getting drawerState...");
|
||||
// return this.$store.getters.drawerState;
|
||||
// }
|
||||
// },
|
||||
export default {
|
||||
name: 'DocsMenu',
|
||||
props: {
|
||||
categories: Array,
|
||||
active_category: Object,
|
||||
active_topic: Object
|
||||
},
|
||||
data() {
|
||||
let drawer = null;
|
||||
return {
|
||||
drawer
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
drawerTitle: {
|
||||
get() {
|
||||
return "category=" + this.active_category.name
|
||||
+"\ntopic=" + this.active_topic.name
|
||||
}
|
||||
},
|
||||
isMenuLocked: {
|
||||
get() {
|
||||
return this.$store.getters["docs/getIsMenuLocked"]
|
||||
}
|
||||
},
|
||||
isDrawerOpen: {
|
||||
get() {
|
||||
return this.$store.getters["docs/getIsDrawerOpen"]
|
||||
},
|
||||
set(val) {
|
||||
this.$store.dispatch("docs/setIsDrawerOpen", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
clickCategory(category) {
|
||||
this.$store.dispatch("docs/setActiveCategory", category)
|
||||
this.$nuxt.$router.push({path: category.path})
|
||||
},
|
||||
clickTopic(category, topic) {
|
||||
this.$store.dispatch("docs/setActiveCategory", category)
|
||||
this.$store.dispatch("docs/setActiveTopic", topic)
|
||||
this.$nuxt.$router.push({path: topic.path})
|
||||
},
|
||||
toggleDrawerOpened() {
|
||||
this.drawer = !this.drawer;
|
||||
},
|
||||
toggleMenuLocked() {
|
||||
this.$store.dispatch("docs/setIsMenuLocked", !this.$store.getters["docs/getIsMenuLocked"])
|
||||
},
|
||||
setIsDrawerOpen() {
|
||||
this.$store.commit('docs/setIsDrawerOpen', this.drawer);
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.$store.dispatch("docs/loadCategories");
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
|
||||
.v-list-item {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
/*.v-list-item {*/
|
||||
/* color: #FFFFFF;*/
|
||||
/*}*/
|
||||
|
||||
.v-list-item--title {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
/*.v-list-item--title {*/
|
||||
/* color: #FFFFFF;*/
|
||||
/*}*/
|
||||
|
||||
.v-list-item--active {
|
||||
color: #FFFFFF !important;
|
||||
}
|
||||
.v-list-item--disabled {
|
||||
color: #DDDDDD !important;
|
||||
}
|
||||
.v-list-item--active {
|
||||
/*border: 1px black;*/
|
||||
background-color: #EEEEEE;
|
||||
/*color: #FFFFFF !important;*/
|
||||
}
|
||||
|
||||
div.theme--light.v-list-item:not(.v-list-item--active):not(.v-list-item--disabled) {
|
||||
color: #DDDDDD !important;
|
||||
}
|
||||
a.theme--light.v-list-item:not(.v-list-item--active):not(.v-list-item--disabled) {
|
||||
color: #DDDDDD !important;
|
||||
}
|
||||
/*.v-list-item--disabled {*/
|
||||
/* color: #DDDDDD !important;*/
|
||||
/*}*/
|
||||
|
||||
.nuxt-link-exact-active {
|
||||
/*color: #52c41a;*/
|
||||
background-color: #7F828B;
|
||||
color: #52c41a;
|
||||
/*color: #000000;*/
|
||||
}
|
||||
/*div.theme--light.v-list-item:not(.v-list-item--active):not(.v-list-item--disabled) {*/
|
||||
/* color: #DDDDDD !important;*/
|
||||
/*}*/
|
||||
/*a.theme--light.v-list-item:not(.v-list-item--active):not(.v-list-item--disabled) {*/
|
||||
/* color: #DDDDDD !important;*/
|
||||
/*}*/
|
||||
|
||||
.isactive {
|
||||
background-color: #7F828B;
|
||||
color: #52c41a;
|
||||
}
|
||||
/*.nuxt-link-exact-active {*/
|
||||
/* !*color: #52c41a;*!*/
|
||||
/* background-color: #7F828B;*/
|
||||
/* color: #52c41a;*/
|
||||
/* !*color: #000000;*!*/
|
||||
/*}*/
|
||||
|
||||
.router-link-active {
|
||||
background-color: #FFFFFF;
|
||||
color: #FFFFFF;
|
||||
/*.isactive {*/
|
||||
/* background-color: #7F828B;*/
|
||||
/* color: #52c41a;*/
|
||||
/*}*/
|
||||
|
||||
}
|
||||
/*.router-link-active {*/
|
||||
/* background-color: #FFFFFF;*/
|
||||
/* color: #FFFFFF;*/
|
||||
|
||||
/*}*/
|
||||
</style>
|
||||
|
||||
25
docsys/src/main/node/docsys/components/MainAppBar.vue
Normal file
25
docsys/src/main/node/docsys/components/MainAppBar.vue
Normal file
@@ -0,0 +1,25 @@
|
||||
<template>
|
||||
<v-app-bar app fluid>
|
||||
<!-- <v-app-bar app dark fluid dense flat>-->
|
||||
<v-toolbar-title><slot></slot></v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-toolbar-items>
|
||||
<app-selector></app-selector>
|
||||
<workspace-selector></workspace-selector>
|
||||
</v-toolbar-items>
|
||||
</v-app-bar>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import AppSelector from "@/components/AppSelector";
|
||||
import WorkspaceSelector from "@/components/WorkspaceSelector";
|
||||
|
||||
export default {
|
||||
name: "MainAppBar",
|
||||
components: {WorkspaceSelector, AppSelector}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
||||
@@ -1,149 +1,197 @@
|
||||
<template>
|
||||
<div>
|
||||
<markdown-it-vue class="md-body" :content="mdcontent" :options="mdoptions"/>
|
||||
</div>
|
||||
<!-- <v-main fluid class="d-block">-->
|
||||
<!-- <markdown-it-vue class="d-block" :content="mdcontent" :options="mdoptions"/>-->
|
||||
<markdown-it-vue class="md-body" ref="myMarkdownItVue" :content="mdcontent" :options="options"/>
|
||||
<!-- </v-main>-->
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import MarkdownItVue from 'markdown-it-vue'
|
||||
// import 'markdown-it-vue/dist/markdown-it-vue.css'
|
||||
// var hljs = require('highlight.js');
|
||||
import MarkdownItVue from 'markdown-it-vue'
|
||||
// https://www.npmjs.com/package/markdown-it-replace-link
|
||||
// https://www.npmjs.com/package/markdown-it-relativelink
|
||||
// import 'markdown-it-link-attributes'
|
||||
// import 'markdown-it-relativelink'
|
||||
// let mireli = require('markdown-it-relativelink')({prefix: 'http://example.com/'})
|
||||
|
||||
// let msa = require('markdown-it-smartarrows');
|
||||
// this.use(msa);
|
||||
import 'markdown-it-replace-link'
|
||||
|
||||
export default {
|
||||
name: "MarkdownVue",
|
||||
components: {MarkdownItVue},
|
||||
mounted() {
|
||||
console.log("mounted");
|
||||
},
|
||||
let mireplink = require('markdown-it-replace-link')
|
||||
|
||||
props: {
|
||||
mdcontent: String,
|
||||
mdoptions: Object
|
||||
export default {
|
||||
name: "MarkdownVue",
|
||||
components: {MarkdownItVue},
|
||||
mounted() {
|
||||
let mmd = this.$refs.myMarkdownItVue;
|
||||
mmd.use(mireplink);
|
||||
|
||||
// mdoptions: {
|
||||
// type: Object,
|
||||
// default: {
|
||||
// markdownIt: {
|
||||
// linkify: true
|
||||
// },
|
||||
// linkAttributes: {
|
||||
// attrs: {
|
||||
// target: '_blank',
|
||||
// rel: 'noopener'
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
// mmd.use(mirl)
|
||||
// console.log("typeof(mmd):" + typeof (mmd))
|
||||
|
||||
},
|
||||
// data() {
|
||||
// let options = {
|
||||
// markdownIt: {
|
||||
// linkify: true
|
||||
// },
|
||||
// linkAttributes: {
|
||||
// attrs: {
|
||||
// target: '_blank',
|
||||
// rel: 'noopener'
|
||||
// }
|
||||
// },
|
||||
// replaceLink: function(link, env) {
|
||||
// return "LINK:" + link;
|
||||
// }
|
||||
// }
|
||||
// return {options}
|
||||
// },
|
||||
props: {
|
||||
mdcontent: String,
|
||||
options: {
|
||||
testing: "one two three"
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
|
||||
code.hljs::before,code:before {
|
||||
content: '';
|
||||
}
|
||||
.v-application code:before,.v-application code:after {
|
||||
content: '';
|
||||
}
|
||||
.v-application code {
|
||||
background-color: #E3FFE3;
|
||||
/*background-color: #FBE5E1;*/
|
||||
padding: unset;
|
||||
/*padding: 10px;*/
|
||||
color: unset;
|
||||
}
|
||||
|
||||
code::before {
|
||||
content: '';
|
||||
}
|
||||
.markdown-body pre {
|
||||
/*background-color: #52c41a;*/
|
||||
padding: 10px 10px 10px 0;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 5px;
|
||||
margin: 0px 0px 10px 5px;
|
||||
}
|
||||
ul {
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
div.markdown-body p {
|
||||
padding: 10px 0 0 0;
|
||||
}
|
||||
|
||||
code:after {
|
||||
content: '';
|
||||
}
|
||||
code::after {
|
||||
content: '';
|
||||
}
|
||||
.hljs code {
|
||||
background-color: #E3FFE3;
|
||||
padding: unset;
|
||||
color: unset;
|
||||
/*padding: 100px;*/
|
||||
}
|
||||
|
||||
.md-body {
|
||||
padding-left: 10px;
|
||||
justify-content: left;
|
||||
align-items: left;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
alignment: top;
|
||||
text-align: top;
|
||||
webkit-box-align: initial;
|
||||
}
|
||||
pre {
|
||||
background-color: #E3FFE3;
|
||||
padding: unset;
|
||||
color: unset;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alter-info {
|
||||
border: 1px solid #91d5ff;
|
||||
background-color: #e6f7ff;
|
||||
}
|
||||
.markdown-body {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alert-icon-info {
|
||||
color: #1890ff;
|
||||
}
|
||||
/* code.hljs::before,code:before {*/
|
||||
/* content: '';*/
|
||||
/* }*/
|
||||
/* .v-application code:before,.v-application code:after {*/
|
||||
/* content: unset;*/
|
||||
/* }*/
|
||||
|
||||
.markdown-it-vue-alter-success {
|
||||
border: 1px solid #b7eb8f;
|
||||
background-color: #f6ffed;
|
||||
}
|
||||
/* code::before {*/
|
||||
/* content: '';*/
|
||||
/* }*/
|
||||
/* code:after {*/
|
||||
/* content: '';*/
|
||||
/* }*/
|
||||
|
||||
.markdown-it-vue-alert-icon-success {
|
||||
color: #52c41a;
|
||||
}
|
||||
/* pre {*/
|
||||
/* padding: 5px;*/
|
||||
/* margin: 0px 0px 10px 5px;*/
|
||||
/* }*/
|
||||
/* ul {*/
|
||||
/* padding-bottom: 10px;*/
|
||||
/* }*/
|
||||
|
||||
.markdown-it-vue-alter-error {
|
||||
border: 1px solid #f5222d;
|
||||
background-color: #fff1f0;
|
||||
}
|
||||
/* code::after {*/
|
||||
/* content: '';*/
|
||||
/* }*/
|
||||
|
||||
.markdown-it-vue-alert-icon-error {
|
||||
color: #f5222d;
|
||||
}
|
||||
/* .md-body {*/
|
||||
/* padding-left: 10px;*/
|
||||
/* justify-content: left;*/
|
||||
/* align-items: left;*/
|
||||
/* text-align: left;*/
|
||||
/* vertical-align: top;*/
|
||||
/* alignment: top;*/
|
||||
/* text-align: top;*/
|
||||
/* webkit-box-align: initial;*/
|
||||
/* }*/
|
||||
|
||||
.markdown-it-vue-alter-warning {
|
||||
border: 1px solid #ffe58f;
|
||||
background-color: #fffbe6;
|
||||
}
|
||||
.markdown-it-vue-alter-info {
|
||||
border: 1px solid #91d5ff;
|
||||
background-color: #e6f7ff;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alert-icon-warning {
|
||||
color: #faad14;
|
||||
}
|
||||
.markdown-it-vue-alert-icon-info {
|
||||
color: #1890ff;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alter {
|
||||
border-radius: 0;
|
||||
border: 0;
|
||||
margin-bottom: 0;
|
||||
display: inline-flex;
|
||||
font-family: 'Chinese Quote', -apple-system, BlinkMacSystemFont, 'Segoe UI',
|
||||
'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue',
|
||||
Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
|
||||
'Segoe UI Symbol';
|
||||
font-size: 14px;
|
||||
font-variant: tabular-nums;
|
||||
line-height: 1.5;
|
||||
color: rgba(0, 0, 0, 0.65);
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
position: relative;
|
||||
padding: 8px 15px 8px 37px;
|
||||
border-radius: 4px;
|
||||
width: 100%;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.markdown-it-vue-alter-success {
|
||||
border: 1px solid #b7eb8f;
|
||||
background-color: #f6ffed;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alter p {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
.markdown-it-vue-alert-icon-success {
|
||||
color: #52c41a;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alert-icon {
|
||||
top: 11.5px;
|
||||
left: 16px;
|
||||
position: absolute;
|
||||
}
|
||||
.markdown-it-vue-alter-error {
|
||||
border: 1px solid #f5222d;
|
||||
background-color: #fff1f0;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alert-icon-error {
|
||||
color: #f5222d;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alter-warning {
|
||||
border: 1px solid #ffe58f;
|
||||
background-color: #fffbe6;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alert-icon-warning {
|
||||
color: #faad14;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alter {
|
||||
border-radius: 0;
|
||||
border: 0;
|
||||
margin-bottom: 0;
|
||||
display: inline-flex;
|
||||
font-family: 'Chinese Quote', -apple-system, BlinkMacSystemFont, 'Segoe UI',
|
||||
'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue',
|
||||
Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
|
||||
'Segoe UI Symbol';
|
||||
font-size: 14px;
|
||||
font-variant: tabular-nums;
|
||||
line-height: 1.5;
|
||||
color: rgba(0, 0, 0, 0.65);
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
position: relative;
|
||||
padding: 8px 15px 8px 37px;
|
||||
border-radius: 4px;
|
||||
width: 100%;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alter p {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.markdown-it-vue-alert-icon {
|
||||
top: 11.5px;
|
||||
left: 16px;
|
||||
position: absolute;
|
||||
}
|
||||
</style>
|
||||
|
||||
94
docsys/src/main/node/docsys/components/WorkspaceSelector.vue
Normal file
94
docsys/src/main/node/docsys/components/WorkspaceSelector.vue
Normal file
@@ -0,0 +1,94 @@
|
||||
<template>
|
||||
<!-- <v-container fluid class="d-flex pa-3">-->
|
||||
<v-row>
|
||||
<v-col cols="12">
|
||||
<v-text-field dense
|
||||
full-width
|
||||
label="Name of new workspace"
|
||||
v-if="mode==='adding'"
|
||||
v-model="new_workspace"
|
||||
ref="new_workspace_input"
|
||||
hint="workspace name"
|
||||
@blur="commitWorkspace(new_workspace)"
|
||||
@keydown.enter="commitWorkspace(new_workspace)"
|
||||
@keydown.esc="cancelWorkspace()"
|
||||
></v-text-field>
|
||||
<!-- label="workspace"-->
|
||||
<v-select dense outlined
|
||||
full-width
|
||||
hide-details="true"
|
||||
hint="current workspace"
|
||||
v-if="mode==='showing'"
|
||||
v-model="workspace"
|
||||
:items="workspaces"
|
||||
item-text="name"
|
||||
item-value="name"
|
||||
prepend-inner-icon="mdi-folder"
|
||||
title="active workspace"
|
||||
>
|
||||
<template v-slot:append-item>
|
||||
<v-list-item>
|
||||
<v-btn link @click="addWorkspace()">+ Add Workspace</v-btn>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn to="/ui/workspaces">Manage</v-btn>
|
||||
</v-list-item>
|
||||
</template>
|
||||
</v-select>
|
||||
</v-col>
|
||||
</v-row>
|
||||
<!-- </v-container>-->
|
||||
</template>
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'workspace-selector',
|
||||
data() {
|
||||
let mode = "showing";
|
||||
let new_workspace = "";
|
||||
return {mode, new_workspace}
|
||||
},
|
||||
computed: {
|
||||
workspace: {
|
||||
get() {
|
||||
return this.$store.getters["workspaces/getWorkspace"]
|
||||
},
|
||||
set(val) {
|
||||
this.$store.dispatch("workspaces/setWorkspace", val)
|
||||
}
|
||||
},
|
||||
workspaces: {
|
||||
get() {
|
||||
return this.$store.getters["workspaces/getWorkspaces"]
|
||||
},
|
||||
set(val) {
|
||||
this.$store.dispatch("workspaces/setWorkspaces", val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
cancelWorkspace: function () {
|
||||
this.mode = "showing";
|
||||
this.new_workspace = "";
|
||||
},
|
||||
addWorkspace: function () {
|
||||
this.mode = "adding";
|
||||
// this.$refs.new_workspace_input.focus();
|
||||
this.$nextTick(() => {
|
||||
this.$refs.new_workspace_input.focus();
|
||||
});
|
||||
},
|
||||
commitWorkspace: function ({$store}) {
|
||||
// console.log("commit:" + JSON.stringify(this.new_workspace));
|
||||
this.$store.dispatch("workspaces/activateWorkspace", this.new_workspace);
|
||||
this.new_workspace = "";
|
||||
this.mode = "showing";
|
||||
}
|
||||
},
|
||||
created() {
|
||||
console.log("created component...");
|
||||
this.$store.dispatch('workspaces/initWorkspaces', "selector load");
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
</style>
|
||||
51
docsys/src/main/node/docsys/js/docpaths.js
Normal file
51
docsys/src/main/node/docsys/js/docpaths.js
Normal file
@@ -0,0 +1,51 @@
|
||||
/**
|
||||
* Path scheme:
|
||||
* /docs/cat1/t1/t2/t3.md
|
||||
* _____ docs prefix
|
||||
* / delimiter
|
||||
* ____ category name
|
||||
* / delimiter
|
||||
* ___________ topic path, including separators
|
||||
* ________ topic name, without extension
|
||||
*
|
||||
* /docs/cat1/index.md summary doc for cat1
|
||||
* ______________________ topic path
|
||||
* __________ category path
|
||||
*/
|
||||
|
||||
|
||||
export default {
|
||||
getCategory(route, categories) {
|
||||
let active_category = categories[0];
|
||||
if (!route.path) {
|
||||
active_category = categories[0];
|
||||
} else {
|
||||
let parts = route.path.split(/\/|%2F/)
|
||||
if (parts[1]!=="docs" || parts.length===1) {
|
||||
throw "invalid path for docs: '" + route.path + "' parts[0]=" + parts[0] + " parts=" + JSON.stringify(parts,null,2)
|
||||
}
|
||||
if (parts.length>2) {
|
||||
let found = categories.find(x => x.name === parts[2]);
|
||||
if (found) {
|
||||
active_category = found;
|
||||
}
|
||||
}
|
||||
}
|
||||
return active_category;
|
||||
},
|
||||
|
||||
getTopic(route, categories, active_category) {
|
||||
let active_topic = active_category.summary_topic;
|
||||
|
||||
if (!route.path) {
|
||||
active_topic = active_category.topics[0]
|
||||
} else {
|
||||
let found_topic = active_category.topics.find(x => {return x.path === route.path})
|
||||
if (found_topic) {
|
||||
active_topic = found_topic;
|
||||
}
|
||||
}
|
||||
return active_topic;
|
||||
|
||||
}
|
||||
}
|
||||
42
docsys/src/main/node/docsys/js/endpoints.js
Normal file
42
docsys/src/main/node/docsys/js/endpoints.js
Normal file
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* Path scheme:
|
||||
* /docs/cat1/t1/t2/t3.md
|
||||
* _____ docs prefix
|
||||
* / delimiter
|
||||
* ____ category name
|
||||
* / delimiter
|
||||
* ___________ topic path, including separators
|
||||
* ________ topic name, without extension
|
||||
*
|
||||
* /docs/cat1/index.md summary doc for cat1
|
||||
* ______________________ topic path
|
||||
* __________ category path
|
||||
*/
|
||||
|
||||
|
||||
export default {
|
||||
url(document, context, path) {
|
||||
console.log("isDev=" + context.isDev)
|
||||
console.log("document.location=" + JSON.stringify(document.location, null, 2))
|
||||
|
||||
let origin = document.location.origin;
|
||||
let base = origin;
|
||||
|
||||
if (origin.includes(":3003")) {
|
||||
base = origin.replace(":3003", ":12345")
|
||||
}
|
||||
console.log("base=" + base);
|
||||
let url = base + path;
|
||||
console.log("url=" + url);
|
||||
return url;
|
||||
},
|
||||
localize(body, baseurl) {
|
||||
// console.log("localize([body],baseurl='" + baseurl + "'")
|
||||
// const regex = /\[([^/][^]]+)]/;
|
||||
// let remaining = body;
|
||||
//
|
||||
// while (remaining.)
|
||||
//
|
||||
return body;
|
||||
}
|
||||
}
|
||||
@@ -3,53 +3,57 @@
|
||||
<nuxt />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "DefaultLayout"
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
html {
|
||||
font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI',
|
||||
Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
font-size: 16px;
|
||||
word-spacing: 1px;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
/*html {*/
|
||||
/* font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI',*/
|
||||
/* Roboto, 'Helvetica Neue', Arial, sans-serif;*/
|
||||
/* font-size: 16px;*/
|
||||
/* word-spacing: 1px;*/
|
||||
/* -ms-text-size-adjust: 100%;*/
|
||||
/* -webkit-text-size-adjust: 100%;*/
|
||||
/* -moz-osx-font-smoothing: grayscale;*/
|
||||
/* -webkit-font-smoothing: antialiased;*/
|
||||
/* box-sizing: border-box;*/
|
||||
/*}*/
|
||||
|
||||
*,
|
||||
*:before,
|
||||
*:after {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
}
|
||||
/**,*/
|
||||
/**:before,*/
|
||||
/**:after {*/
|
||||
/* box-sizing: border-box;*/
|
||||
/* margin: 0;*/
|
||||
/*}*/
|
||||
|
||||
.button--purple {
|
||||
display: inline-block;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #0C1439;
|
||||
color: #0C1439;
|
||||
text-decoration: none;
|
||||
padding: 10px 30px;
|
||||
}
|
||||
/*.button--purple {*/
|
||||
/* display: inline-block;*/
|
||||
/* border-radius: 4px;*/
|
||||
/* border: 1px solid #0C1439;*/
|
||||
/* color: #0C1439;*/
|
||||
/* text-decoration: none;*/
|
||||
/* padding: 10px 30px;*/
|
||||
/*}*/
|
||||
|
||||
.button--purple:hover {
|
||||
color: #fff;
|
||||
background-color: #0C1439;
|
||||
}
|
||||
/*.button--purple:hover {*/
|
||||
/* color: #fff;*/
|
||||
/* background-color: #0C1439;*/
|
||||
/*}*/
|
||||
|
||||
.button--grey {
|
||||
display: inline-block;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #35495e;
|
||||
color: #35495e;
|
||||
text-decoration: none;
|
||||
padding: 10px 30px;
|
||||
margin-left: 15px;
|
||||
}
|
||||
/*.button--grey {*/
|
||||
/* display: inline-block;*/
|
||||
/* border-radius: 4px;*/
|
||||
/* border: 1px solid #35495e;*/
|
||||
/* color: #35495e;*/
|
||||
/* text-decoration: none;*/
|
||||
/* padding: 10px 30px;*/
|
||||
/* margin-left: 15px;*/
|
||||
/*}*/
|
||||
|
||||
.button--grey:hover {
|
||||
color: #fff;
|
||||
background-color: #35495e;
|
||||
}
|
||||
/*.button--grey:hover {*/
|
||||
/* color: #fff;*/
|
||||
/* background-color: #35495e;*/
|
||||
/*}*/
|
||||
</style>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<v-app dark>
|
||||
<v-app>
|
||||
<h1 v-if="error.statusCode === 404">
|
||||
{{ pageNotFound }}
|
||||
</h1>
|
||||
|
||||
@@ -1,188 +0,0 @@
|
||||
// asyncData in multiple mixins seems to be broken, or worse, working as designed
|
||||
export default {
|
||||
async asyncData(context) {
|
||||
|
||||
function fetchStatusHandler(response) {
|
||||
if (response.status === 200) {
|
||||
return response;
|
||||
} else {
|
||||
throw new Error(response.statusText);
|
||||
}
|
||||
}
|
||||
|
||||
if (context.req) {
|
||||
console.log("avoiding server-side async");
|
||||
return;
|
||||
}
|
||||
|
||||
let baseurl = document.location.href.split('/').slice(0,3).join('/');
|
||||
if (context.isDev && baseurl.includes(":3000")) {
|
||||
console.log("Dev mode: remapping 3000 to 12345 for split dev environment.");
|
||||
baseurl = baseurl.replace("3000","12345");
|
||||
}
|
||||
|
||||
let services = baseurl + "/services";
|
||||
|
||||
console.log("async loading get_categories data: context: " + context);
|
||||
var fm = require('front-matter');
|
||||
|
||||
|
||||
let paths = await fetch(services+"/docs/markdown.csv")
|
||||
.then(res => {
|
||||
return res.text()
|
||||
})
|
||||
.then(body => {
|
||||
return body.split("\n")
|
||||
})
|
||||
.catch(err => {
|
||||
console.log("error:" + err)
|
||||
});
|
||||
|
||||
let imports = [];
|
||||
let promises = [];
|
||||
|
||||
for (let index in paths) {
|
||||
let key = paths[index];
|
||||
if (key == null || key == "") {
|
||||
continue
|
||||
}
|
||||
const [, name] = key.match(/(.+)\.md$/);
|
||||
let detailName = key.split("/").filter(x => x.includes(".md"))[0];
|
||||
detailName = detailName.substr(0, detailName.length - 3);
|
||||
|
||||
let categories = key.split("/").filter(x => !x.includes("."))
|
||||
//const mdMeta = resolve(key);
|
||||
promises.push(fetch(services + "/docs/markdown/" + key)
|
||||
.then(res => res.text())
|
||||
.then(body => {
|
||||
return {
|
||||
"rawMD": body,
|
||||
"detailName": detailName,
|
||||
"categories": categories,
|
||||
"name": name
|
||||
}
|
||||
}));
|
||||
}
|
||||
var mdData = await Promise.all(
|
||||
promises
|
||||
);
|
||||
|
||||
for(var data of mdData){
|
||||
|
||||
let rawMD = data.rawMD;
|
||||
|
||||
var mdMeta = fm(rawMD);
|
||||
|
||||
if (mdMeta.attributes == null || mdMeta.attributes.title == null) {
|
||||
mdMeta.attributes.title = data.detailName;
|
||||
}
|
||||
if (typeof mdMeta.attributes.weight === 'undefined') {
|
||||
mdMeta.attributes.weight = 0;
|
||||
}
|
||||
|
||||
mdMeta.categories = data.categories;
|
||||
mdMeta.filename = encodeURIComponent(data.name);
|
||||
|
||||
//console.log("mdMeta:" + JSON.stringify(mdMeta));
|
||||
imports.push(mdMeta);
|
||||
}
|
||||
const categorySet = new Set();
|
||||
imports.forEach(x => {
|
||||
categorySet.add(x.categories.toString())
|
||||
});
|
||||
|
||||
const categories = Array.from(categorySet).map(category => {
|
||||
let docs = imports.filter(x => x.categories.toString() === category);
|
||||
let summarydoc = docs.find(x => x.filename.endsWith('index'));
|
||||
docs = docs.filter(x=>!x.filename.endsWith('index'));
|
||||
docs.forEach(d => delete d.body);
|
||||
docs.sort((a, b) => a.attributes.weight - b.attributes.weight);
|
||||
let weight = summarydoc ? summarydoc.attributes.weight : 0;
|
||||
let categoryName = summarydoc ? ( summarydoc.attributes.title ? summarydoc.attributes.title : category ) : category;
|
||||
return {category, categoryName, docs, summarydoc, weight}
|
||||
}
|
||||
).sort((c1,c2) => c1.weight - c2.weight);
|
||||
|
||||
let active_category='';
|
||||
let active_category_name='';
|
||||
let active_topic='';
|
||||
|
||||
// IFF no category was active, then make the first category active.
|
||||
if (!context.params.slug) {
|
||||
console.log("params.slug was not defined");
|
||||
active_category=categories[0].category;
|
||||
active_category_name=categories[0].categoryName;
|
||||
|
||||
if (categories[0].summarydoc == null && categories[0].docs.length>0) {
|
||||
active_topic = categories[0].docs[0].filename;
|
||||
}
|
||||
} else {
|
||||
let parts = context.params.slug.split("/",2);
|
||||
active_category=parts[0];
|
||||
console.log("==> params.slug[" + context.params.slug + "] active_category[" + active_category + "]");
|
||||
active_topic = parts.length>1 ? parts[1] : null;
|
||||
}
|
||||
|
||||
if (active_topic !== null && active_topic.endsWith(".html")) {
|
||||
active_topic = active_topic.substr(0,active_topic.length-5);
|
||||
}
|
||||
if (active_topic !== null && active_topic.endsWith(".md")) {
|
||||
active_topic = active_topic.substr(0,active_topic.length-3);
|
||||
}
|
||||
|
||||
if (active_category !== null && active_category.endsWith(".html")) {
|
||||
active_category = active_category.substr(0,active_category.length-5);
|
||||
}
|
||||
if (active_category !== null && active_category.endsWith(".md")) {
|
||||
active_category = active_category.substr(0,active_category.length-3);
|
||||
}
|
||||
|
||||
let foundCategory = categories.find(c => c.category === active_category);
|
||||
|
||||
if (foundCategory != undefined){
|
||||
active_category_name = categories.find(c => c.category === active_category).categoryName;
|
||||
}
|
||||
|
||||
console.log("==> active category[" + active_category + "] topic["+ active_topic +"]");
|
||||
|
||||
// At this point, we have an active category or even a topic.
|
||||
// We're all in on loading markdown, but which one?
|
||||
|
||||
let docname = active_category;
|
||||
|
||||
if (active_topic) {
|
||||
docname += '/' + active_topic + '.md';
|
||||
} else {
|
||||
docname += '/' + 'index.md';
|
||||
}
|
||||
console.log("docname: " + docname);
|
||||
var fm = require('front-matter');
|
||||
|
||||
let docbody = "";
|
||||
|
||||
let mdPath = services + '/docs/markdown/' + docname;
|
||||
|
||||
let rawMD = await fetch(services + "/docs/markdown/" + docname)
|
||||
.then(fetchStatusHandler)
|
||||
.then(res => res.text())
|
||||
.then(body => docbody = body)
|
||||
.catch(function(error) {
|
||||
console.log(error);
|
||||
});;
|
||||
|
||||
|
||||
var markdown = fm(rawMD);
|
||||
|
||||
// console.log("markdown_body:\n" + markdown.body);
|
||||
let mydata = {
|
||||
markdown_attr: markdown.attributes,
|
||||
markdown_body: markdown.body,
|
||||
categories: categories,
|
||||
active_category: active_category,
|
||||
active_category_name : active_category_name,
|
||||
active_topic: active_topic
|
||||
};
|
||||
return mydata;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,52 +1,52 @@
|
||||
// asyncData in multiple mixins seems to be broken, or worse, working as designed
|
||||
export default {
|
||||
async asyncData(context) {
|
||||
|
||||
// if (context.req) {
|
||||
// console.log("avoiding server-side async");
|
||||
// return;
|
||||
// }
|
||||
|
||||
let baseurl = document.location.href.split('/').slice(0,3).join('/');
|
||||
|
||||
if (context.isDev && baseurl.includes(":3000")) {
|
||||
console.log("Dev mode: remapping 3000 to 12345 for split dev environment.");
|
||||
baseurl = baseurl.replace("3000","12345");
|
||||
}
|
||||
|
||||
let services = baseurl + "/services";
|
||||
|
||||
// console.log("async loading get_categories data: context: " + context);
|
||||
var fm = require('front-matter');
|
||||
|
||||
let namespaces_endpoint = services + "/docs/namespaces";
|
||||
|
||||
let namespaces = await context.$axios.$get(namespaces_endpoint);
|
||||
// let namespaces = await fetch(services+"/docs/namespaces")
|
||||
// .then(response => {
|
||||
// return response.json()
|
||||
// })
|
||||
// .catch(err => {
|
||||
// console.log("error:" + err)
|
||||
// });
|
||||
|
||||
const collated = Array();
|
||||
for (let ena in namespaces) {
|
||||
for (let ns in namespaces[ena]) {
|
||||
collated.push({
|
||||
namespace: ns,
|
||||
show: (ena==="enabled"),
|
||||
paths: namespaces[ena]
|
||||
});
|
||||
console.log ("ns:"+ ns + ", ena: " + ena);
|
||||
}
|
||||
// namespaces[ena].forEach(e => {e.isEnabled = (ena === "enabled")});
|
||||
// collated=collated.concat(namespaces[ena])
|
||||
}
|
||||
|
||||
let result={namespaces: collated};
|
||||
console.log("namespaces result:"+JSON.stringify(result));
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
// // asyncData in multiple mixins seems to be broken, or worse, working as designed
|
||||
// export default {
|
||||
// async asyncData(context) {
|
||||
//
|
||||
// // if (context.req) {
|
||||
// // console.log("avoiding server-side async");
|
||||
// // return;
|
||||
// // }
|
||||
//
|
||||
// let baseurl = document.location.href.split('/').slice(0,3).join('/');
|
||||
//
|
||||
// if (context.isDev && baseurl.includes(":3000")) {
|
||||
// console.log("Dev mode: remapping 3000 to 12345 for split dev environment.");
|
||||
// baseurl = baseurl.replace("3000","12345");
|
||||
// }
|
||||
//
|
||||
// let services = baseurl + "/services";
|
||||
//
|
||||
// // console.log("async loading get_categories data: context: " + context);
|
||||
// var fm = require('front-matter');
|
||||
//
|
||||
// let namespaces_endpoint = services + "/docs/namespaces";
|
||||
//
|
||||
// let namespaces = await context.$axios.$get(namespaces_endpoint);
|
||||
// // let namespaces = await fetch(services+"/docs/namespaces")
|
||||
// // .then(response => {
|
||||
// // return response.json()
|
||||
// // })
|
||||
// // .catch(err => {
|
||||
// // console.log("error:" + err)
|
||||
// // });
|
||||
//
|
||||
// const collated = Array();
|
||||
// for (let ena in namespaces) {
|
||||
// for (let ns in namespaces[ena]) {
|
||||
// collated.push({
|
||||
// namespace: ns,
|
||||
// show: (ena==="enabled"),
|
||||
// paths: namespaces[ena]
|
||||
// });
|
||||
// console.log ("ns:"+ ns + ", ena: " + ena);
|
||||
// }
|
||||
// // namespaces[ena].forEach(e => {e.isEnabled = (ena === "enabled")});
|
||||
// // collated=collated.concat(namespaces[ena])
|
||||
// }
|
||||
//
|
||||
// let result={namespaces: collated};
|
||||
// // console.log("namespaces result:"+JSON.stringify(result));
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
@@ -46,30 +46,33 @@ export default {
|
||||
'@nuxtjs/axios'
|
||||
],
|
||||
axios: {
|
||||
baseURL: "http://localhost:12345/",
|
||||
port: 12345,
|
||||
__browserBaseURL: 'http://localhost:12345/services/',
|
||||
baseUrl: '/services/',
|
||||
progress: true
|
||||
},
|
||||
/*
|
||||
** vuetify module configuration
|
||||
** https://github.com/nuxt-community/vuetify-module
|
||||
*/
|
||||
vuetify: {
|
||||
theme: {
|
||||
dark: false,
|
||||
themes: {
|
||||
light: {
|
||||
primary: '#51DDBD',
|
||||
secondary: '#2D4ADE',
|
||||
accent: '#FA7D2B',
|
||||
// primary: '#1976D2',
|
||||
// secondary: '#424242',
|
||||
// accent: '#82B1FF',
|
||||
error: '#FF5252',
|
||||
info: '#2196F3',
|
||||
success: '#4CAF50',
|
||||
warning: '#FFC107'
|
||||
}
|
||||
}
|
||||
}
|
||||
// theme: {
|
||||
// dark: false,
|
||||
// themes: {
|
||||
// light: {
|
||||
// primary: '#51DDBD',
|
||||
// secondary: '#2D4ADE',
|
||||
// accent: '#FA7D2B',
|
||||
// // primary: '#1976D2',
|
||||
// // secondary: '#424242',
|
||||
// // accent: '#82B1FF',
|
||||
// error: '#FF5252',
|
||||
// info: '#2196F3',
|
||||
// success: '#4CAF50',
|
||||
// warning: '#FFC107'
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
},
|
||||
router: {
|
||||
mode: 'hash'
|
||||
@@ -96,6 +99,19 @@ export default {
|
||||
** Build configuration
|
||||
*/
|
||||
build: {
|
||||
html: {
|
||||
minify: {
|
||||
collapseBooleanAttributes: false,
|
||||
decodeEntities: false,
|
||||
minifyCSS: false,
|
||||
minifyJS: false,
|
||||
processConditionalComments: false,
|
||||
removeEmptyAttributes: false,
|
||||
removeRedundantAttributes: false,
|
||||
trimCustomFragments: false,
|
||||
useShortDoctype: false
|
||||
}
|
||||
},
|
||||
// analyze: {
|
||||
// analyzerMode: 'static'
|
||||
// },
|
||||
@@ -107,6 +123,17 @@ export default {
|
||||
*/
|
||||
extend(config, ctx) {
|
||||
config.devtool = ctx.isClient ? 'eval-source-map' : 'inline-source-map'
|
||||
config.module.rules.push({
|
||||
test: /.g4/, loader: 'antlr4-webpack-loader'
|
||||
})
|
||||
config.module.rules.push({
|
||||
test: /\.ya?ml$/,
|
||||
use: 'js-yaml-loader',
|
||||
})
|
||||
config.node = {
|
||||
fs: 'empty'
|
||||
}
|
||||
config.optimization.minimize = false;
|
||||
}
|
||||
}
|
||||
, generate: {
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import colors from 'vuetify/es5/util/colors'
|
||||
|
||||
var glob = require('glob');
|
||||
var path = require('path');
|
||||
// var glob = require('glob');
|
||||
// var path = require('path');
|
||||
|
||||
export default {
|
||||
// target: 'static',
|
||||
mode: 'spa',
|
||||
/*
|
||||
** Headers of the page
|
||||
@@ -46,31 +47,34 @@ export default {
|
||||
'@nuxtjs/axios'
|
||||
],
|
||||
axios: {
|
||||
port: 12345
|
||||
|
||||
// port: 12345,
|
||||
// browserBaseURL: 'http://localhost:12345/services/',
|
||||
// baseURL: '/services/',
|
||||
// browserBaseURL: '/services/',
|
||||
progress: true
|
||||
},
|
||||
/*
|
||||
** vuetify module configuration
|
||||
** https://github.com/nuxt-community/vuetify-module
|
||||
*/
|
||||
vuetify: {
|
||||
theme: {
|
||||
dark: false,
|
||||
themes: {
|
||||
light: {
|
||||
primary: '#51DDBD',
|
||||
secondary: '#2D4ADE',
|
||||
accent: '#FA7D2B',
|
||||
// primary: '#1976D2',
|
||||
// secondary: '#424242',
|
||||
// accent: '#82B1FF',
|
||||
error: '#FF5252',
|
||||
info: '#2196F3',
|
||||
success: '#4CAF50',
|
||||
warning: '#FFC107'
|
||||
}
|
||||
}
|
||||
}
|
||||
// theme: {
|
||||
// dark: false,
|
||||
// themes: {
|
||||
// light: {
|
||||
// primary: '#51DDBD',
|
||||
// secondary: '#2D4ADE',
|
||||
// accent: '#FA7D2B',
|
||||
// // primary: '#1976D2',
|
||||
// // secondary: '#424242',
|
||||
// // accent: '#82B1FF',
|
||||
// error: '#FF5252',
|
||||
// info: '#2196F3',
|
||||
// success: '#4CAF50',
|
||||
// warning: '#FFC107'
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
},
|
||||
router: {
|
||||
mode: 'hash'
|
||||
@@ -97,37 +101,63 @@ export default {
|
||||
** Build configuration
|
||||
*/
|
||||
build: {
|
||||
html: {
|
||||
minify: {
|
||||
collapseBooleanAttributes: false,
|
||||
decodeEntities: false,
|
||||
minifyCSS: false,
|
||||
minifyJS: false,
|
||||
processConditionalComments: false,
|
||||
removeEmptyAttributes: false,
|
||||
removeRedundantAttributes: false,
|
||||
trimCustomFragments: false,
|
||||
useShortDoctype: false
|
||||
}
|
||||
},
|
||||
// analyze: {
|
||||
// analyzerMode: 'static'
|
||||
// },
|
||||
cssSourceMap: true,
|
||||
extractCSS: false,
|
||||
// parallel: true,
|
||||
optimization: {
|
||||
minimize: false
|
||||
},
|
||||
/*
|
||||
** You can extend webpack config here
|
||||
*/
|
||||
extend(config, ctx) {
|
||||
config.devtool = ctx.isClient ? 'eval-source-map' : 'inline-source-map'
|
||||
config.module.rules.push({
|
||||
test: /.g4/, loader: 'antlr4-webpack-loader'
|
||||
})
|
||||
config.module.rules.push({
|
||||
test: /\.ya?ml$/,
|
||||
use: 'js-yaml-loader',
|
||||
})
|
||||
config.node = {
|
||||
fs: 'empty'
|
||||
}
|
||||
config.optimization.minimize = false;
|
||||
}
|
||||
}
|
||||
, generate: {
|
||||
routes: dynamicRoutes
|
||||
}
|
||||
|
||||
}
|
||||
// , generate: {
|
||||
// routes: dynamicRoutes
|
||||
// }
|
||||
|
||||
var dynamicRoutes = getDynamicPaths({
|
||||
'/docs': 'docs/*.md',
|
||||
'/#/docs': '/#/docs/*.md'
|
||||
});
|
||||
|
||||
function getDynamicPaths(urlFilepathTable) {
|
||||
return [].concat(
|
||||
...Object.keys(urlFilepathTable).map(url => {
|
||||
var filepathGlob = urlFilepathTable[url];
|
||||
return glob
|
||||
.sync(filepathGlob, {cwd: 'content'})
|
||||
.map(filepath => `${url}/${path.basename(filepath, '.md')}`);
|
||||
})
|
||||
);
|
||||
}
|
||||
// var dynamicRoutes = getDynamicPaths({
|
||||
// '/docs': 'docs/*.md',
|
||||
// '/#/docs': '/#/docs/*.md'
|
||||
// });
|
||||
//
|
||||
// function getDynamicPaths(urlFilepathTable) {
|
||||
// return [].concat(
|
||||
// ...Object.keys(urlFilepathTable).map(url => {
|
||||
// var filepathGlob = urlFilepathTable[url];
|
||||
// return glob
|
||||
// .sync(filepathGlob, {cwd: 'content'})
|
||||
// .map(filepath => `${url}/${path.basename(filepath, '.md')}`);
|
||||
// })
|
||||
// );
|
||||
// }
|
||||
|
||||
@@ -1,129 +0,0 @@
|
||||
var glob = require('glob');
|
||||
var path = require('path');
|
||||
|
||||
|
||||
export default {
|
||||
node: {
|
||||
fs: 'empty',
|
||||
dgram: 'empty'
|
||||
},
|
||||
mode: 'spa',
|
||||
/*
|
||||
** Headers of the page
|
||||
*/
|
||||
head: {
|
||||
title: process.env.npm_package_name || '',
|
||||
meta: [
|
||||
{ charset: 'utf-8' },
|
||||
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
|
||||
{ hid: 'description', name: 'description', content: process.env.npm_package_description || '' }
|
||||
],
|
||||
link: [
|
||||
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
|
||||
]
|
||||
},
|
||||
/*
|
||||
** Customize the progress-bar color
|
||||
*/
|
||||
loading: { color: '#fff' },
|
||||
/*
|
||||
** Global CSS
|
||||
*/
|
||||
css: [
|
||||
],
|
||||
/*
|
||||
** Plugins to load before mounting the App
|
||||
*/
|
||||
plugins: [
|
||||
],
|
||||
/*
|
||||
** Nuxt.js dev-modules
|
||||
*/
|
||||
buildModules: [
|
||||
// Simple usage
|
||||
'@nuxtjs/vuetify'
|
||||
],
|
||||
/*
|
||||
** Nuxt.js modules
|
||||
*/
|
||||
modules: [
|
||||
],
|
||||
|
||||
/*
|
||||
** Build configuration
|
||||
*/
|
||||
build: {
|
||||
babel: {
|
||||
presets({ envName }) {
|
||||
const envTargets = {
|
||||
client: { "chrome": "78" },
|
||||
server: { node: "current" },
|
||||
};
|
||||
return [
|
||||
[
|
||||
"@nuxt/babel-preset-app",
|
||||
{
|
||||
targets: envTargets[envName]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
|
||||
},
|
||||
html: {
|
||||
minify: {
|
||||
minifyJS: false,
|
||||
minifyCSS: false,
|
||||
collapseBooleanAttributes: false,
|
||||
decodeEntities: false,
|
||||
processConditionalComments: false,
|
||||
removeEmptyAttributes: false,
|
||||
removeRedundantAttributes: false,
|
||||
trimCustomFragments: false,
|
||||
useShortDoctype: false
|
||||
}
|
||||
},
|
||||
optimization: {
|
||||
minimize: false
|
||||
}
|
||||
,extend(config,ctx) {
|
||||
config.devtool = ctx.isClient ? 'eval-source-map' : 'inline-source-map'
|
||||
}
|
||||
// , extend(config,ctx) {
|
||||
// config.devtool = ctx.isClient ? 'eval-source-map' : 'inline-source-map';
|
||||
// }
|
||||
},
|
||||
vuetify: {
|
||||
theme: {
|
||||
dark: true,
|
||||
themes:{
|
||||
dark:{
|
||||
primary: '#FF7D2B',
|
||||
secondary: '#0C153A',
|
||||
accent: '#FF7D2B',
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
generate: {
|
||||
routes: dynamicRoutes
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var dynamicRoutes = getDynamicPaths({
|
||||
'/docs': 'docs/*.md'
|
||||
});
|
||||
|
||||
/* https://github.com/jake-101/bael-template */
|
||||
function getDynamicPaths(urlFilepathTable) {
|
||||
return [].concat(
|
||||
...Object.keys(urlFilepathTable).map(url => {
|
||||
var filepathGlob = urlFilepathTable[url];
|
||||
return glob
|
||||
.sync(filepathGlob, { cwd: 'content' })
|
||||
.map(filepath => `${url}/${path.basename(filepath, '.md')}`);
|
||||
})
|
||||
);
|
||||
}
|
||||
9454
docsys/src/main/node/docsys/package-lock.json
generated
9454
docsys/src/main/node/docsys/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -5,18 +5,37 @@
|
||||
"author": "Sebastian Estevez & Jonathan Shook",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "nuxt -c nuxt.config.dev.js",
|
||||
"olddev": "nuxt -c nuxt.config.dev.js --port 3003",
|
||||
"dev": "nuxt --port 3003",
|
||||
"build": "nuxt build",
|
||||
"start": "nuxt start",
|
||||
"generate": "nuxt generate"
|
||||
"generate": "nuxt generate",
|
||||
"antlr": "cd antlr && node ../node_modules/antlr4-cli/bin/antlr4.js -Dlanguage=JavaScript -Werror -visitor -listener CQL3.g4"
|
||||
},
|
||||
"dependencies": {
|
||||
"@nuxtjs/axios": "^5.9.5",
|
||||
"@nuxtjs/vuetify": "^1.11.0",
|
||||
"front-matter": "^3.1.0",
|
||||
"markdown-it-smartarrows": "^1.0.1",
|
||||
"markdown-it-vue": "^1.0.11",
|
||||
"@nuxtjs/axios": "^5.12.2",
|
||||
"@nuxtjs/vuetify": "^2.0.0-beta.2",
|
||||
"@nuxt/webpack": "^2.14.4",
|
||||
"@nuxtjs/babel-preset-app": "^0.8.0",
|
||||
"vue": "^2.6.12",
|
||||
"vue-template-compiler": "^2.6.12",
|
||||
"front-matter": "^4.0.2",
|
||||
"antlr4": "^4.8.0",
|
||||
"antlr4-cli": "^4.5.3",
|
||||
"file-saver": "^2.0.2",
|
||||
"js-yaml": "^3.14.0",
|
||||
"js-yaml-loader": "^1.2.2",
|
||||
"node-fetch": "^2.6.0",
|
||||
"nuxt": "^2.12.0"
|
||||
"source-map-resolve": "^0.6.0",
|
||||
"eslint": "^7.7.0",
|
||||
"chokidar": "^3.4.2",
|
||||
"npm": "^6.14.8",
|
||||
"nuxt": "^2.14.4",
|
||||
"webpack": "^4.44.1",
|
||||
"markdown-it-vue": "^1.1.3",
|
||||
"markdown-it-smartarrows": "^1.0.1",
|
||||
"markdown-it-relativelink": "^0.2.0",
|
||||
"markdown-it-replace-link": "^1.1.0",
|
||||
"markdown-it-highlightjs": "^3.2.0"
|
||||
}
|
||||
}
|
||||
|
||||
137
docsys/src/main/node/docsys/pages/docs/_.vue
Normal file
137
docsys/src/main/node/docsys/pages/docs/_.vue
Normal file
@@ -0,0 +1,137 @@
|
||||
<template>
|
||||
<v-app>
|
||||
|
||||
<docs-menu
|
||||
:active_category="active_category"
|
||||
:active_topic="active_topic"
|
||||
:categories="categories"
|
||||
@change="menuChanged()"
|
||||
@select="menuChanged()"></docs-menu>
|
||||
|
||||
<v-app-bar app collapse-on-scroll dense>
|
||||
<v-app-bar-nav-icon @click.stop="toggleDrawer"/>
|
||||
<v-toolbar-title>{{ toolbarTitle }}</v-toolbar-title>
|
||||
<v-toolbar-items>
|
||||
</v-toolbar-items>
|
||||
|
||||
</v-app-bar>
|
||||
|
||||
<v-main>
|
||||
<markdown-vue :mdcontent="markdown_body"/>
|
||||
</v-main>
|
||||
|
||||
<v-footer app>
|
||||
<span>© 2020</span>
|
||||
</v-footer>
|
||||
|
||||
</v-app>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import DocsMenu from '~/components/DocsMenu.vue'
|
||||
import MarkdownVue from "~/components/MarkdownVue";
|
||||
import docpaths from "@/js/docpaths.js"
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
markdown_body: "testing",
|
||||
active_category: null,
|
||||
active_topic: null
|
||||
}
|
||||
},
|
||||
components: {
|
||||
DocsMenu, MarkdownVue
|
||||
},
|
||||
computed: {
|
||||
categories: {
|
||||
get() {
|
||||
return this.$store.getters["docs/getCategories"]
|
||||
}
|
||||
},
|
||||
toolbarTitle: {
|
||||
get() {
|
||||
if (this.active_category) {
|
||||
return this.active_category.title
|
||||
}
|
||||
return "NoSQLBench Docs"
|
||||
}
|
||||
},
|
||||
// markdown_body: {
|
||||
// get() {
|
||||
// return this.$store.getters["docs/getActiveMarkdownContent"]
|
||||
// }
|
||||
// },
|
||||
active_category: {
|
||||
get() {
|
||||
return this.$store.getters["docs/getActiveCategory"]
|
||||
},
|
||||
async set(val) {
|
||||
await this.$store.dispatch("docs/setCategories", val)
|
||||
}
|
||||
},
|
||||
active_topic: {
|
||||
get() {
|
||||
return this.$store.getters["docs/getActiveTopic"]
|
||||
},
|
||||
async set(val) {
|
||||
await this.$store.dispatch("docs/setActiveTopic")
|
||||
}
|
||||
}
|
||||
},
|
||||
async asyncData({params, route, store}) {
|
||||
await store.dispatch("docs/loadCategories")
|
||||
let categories = await store.getters["docs/getCategories"]
|
||||
let active_category =docpaths.getCategory(route,categories);
|
||||
let active_topic = docpaths.getTopic(route,categories, active_category);
|
||||
|
||||
return {
|
||||
active_category,
|
||||
active_topic,
|
||||
markdown_body: active_topic.content
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async toggleDrawer() {
|
||||
await this.$store.dispatch("docs/setIsDrawerOpen", this.$store.getters["docs/getIsDrawerOpen"])
|
||||
},
|
||||
menuChanged(evt) {
|
||||
console.log("menu changed:" + JSON.stringify(evt, null, 2))
|
||||
this.$forceUpdate()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.container {
|
||||
min-height: 60vh;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
text-align: start;
|
||||
margin: 0 auto 0 15px;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-family: 'Quicksand', 'Source Sans Pro', -apple-system, BlinkMacSystemFont,
|
||||
'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
display: block;
|
||||
font-weight: 300;
|
||||
font-size: 100px;
|
||||
color: #35495e;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-weight: 300;
|
||||
font-size: 42px;
|
||||
color: #526488;
|
||||
word-spacing: 5px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.links {
|
||||
padding-top: 15px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
<template>
|
||||
<v-app>
|
||||
|
||||
<docs-menu v-model="isDrawerOpen"
|
||||
:categories="categories"
|
||||
:active_category="active_category"
|
||||
:active_category_name="active_category_name"
|
||||
:active_topic="active_topic"/>
|
||||
|
||||
<v-app-bar app dark color="secondary" collapse-on-scroll dense >
|
||||
<v-app-bar-nav-icon @click.stop="toggleDrawer"/>
|
||||
<v-toolbar-title>NoSQLBench Docs</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-toolbar-items>
|
||||
</v-toolbar-items>
|
||||
|
||||
</v-app-bar>
|
||||
|
||||
<v-content>
|
||||
<v-container>
|
||||
<v-row align="stretch">
|
||||
<div>{{testdata}}</div>
|
||||
|
||||
<div class="Doc">
|
||||
<div class="doc-title">
|
||||
<h1></h1>
|
||||
</div>
|
||||
<div>
|
||||
<markdown-vue class="md-body content" :mdcontent="markdown_body"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</v-row>
|
||||
</v-container>
|
||||
</v-content>
|
||||
|
||||
<v-footer app dark color="secondary">
|
||||
<span>© 2020</span>
|
||||
</v-footer>
|
||||
|
||||
</v-app>
|
||||
</template>
|
||||
<script>
|
||||
import get_data from '~/mixins/get_data.js';
|
||||
import DocsMenu from '~/components/DocsMenu.vue'
|
||||
import MarkdownVue from "~/components/MarkdownVue";
|
||||
|
||||
export default {
|
||||
mixins: [get_data],
|
||||
components: {
|
||||
DocsMenu, MarkdownVue
|
||||
},
|
||||
computed: {
|
||||
isDrawerOpen() {
|
||||
return this.$store.state.docs.isDrawerOpen;
|
||||
},
|
||||
isDrawerOpen2() {
|
||||
return this.$store.getters.drawerState;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toggleDrawer() {
|
||||
this.$store.commit('docs/toggleDrawerState');
|
||||
}
|
||||
},
|
||||
data(context) {
|
||||
console.log("data context.params:" + JSON.stringify(context.params));
|
||||
console.log("data context.route:" + JSON.stringify(context.route));
|
||||
console.log("data context.query:" + JSON.stringify(context.query));
|
||||
|
||||
return {
|
||||
testdata: this.$store.state.docs.example,
|
||||
categories_list: [],
|
||||
markdown_body: '',
|
||||
active_topic: null,
|
||||
active_category: null,
|
||||
options: function () {
|
||||
return {
|
||||
markdownIt: {
|
||||
linkify: true
|
||||
},
|
||||
linkAttributes: {
|
||||
attrs: {
|
||||
target: '_blank',
|
||||
rel: 'noopener'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,125 +0,0 @@
|
||||
<template>
|
||||
<v-app>
|
||||
|
||||
<docs-menu v-model="isDrawerOpen"
|
||||
:categories="categories"
|
||||
:active_category="active_category"
|
||||
:active_topic="active_topic"/>
|
||||
|
||||
<v-app-bar app dark color="secondary">
|
||||
<v-app-bar-nav-icon color="primary" @click.stop="toggleDrawer"/>
|
||||
<v-toolbar-title>NoSQLBench Docs</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-toolbar-items>
|
||||
<v-btn text href="https://github.com/nosqlbench/nosqlbench/wiki/Submitting-Feedback">SUBMIT FEEDBACK</v-btn>
|
||||
</v-toolbar-items>
|
||||
</v-app-bar>
|
||||
|
||||
<v-content>
|
||||
<v-container>
|
||||
<v-row align="stretch">
|
||||
<div>{{testdata}}</div>
|
||||
|
||||
<div class="Doc">
|
||||
<div class="doc-title">
|
||||
<h1></h1>
|
||||
</div>
|
||||
<div>
|
||||
<markdown-vue class="md-body content" :mdcontent="markdown_body"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</v-row>
|
||||
</v-container>
|
||||
</v-content>
|
||||
|
||||
<v-footer app dark color="secondary">
|
||||
<span>© 2020</span>
|
||||
</v-footer>
|
||||
|
||||
</v-app>
|
||||
</template>
|
||||
<script>
|
||||
import get_data from '~/mixins/get_data.js';
|
||||
import DocsMenu from '~/components/DocsMenu.vue'
|
||||
import MarkdownVue from "~/components/MarkdownVue";
|
||||
|
||||
export default {
|
||||
mixins: [get_data],
|
||||
components: {
|
||||
DocsMenu, MarkdownVue
|
||||
},
|
||||
computed: {
|
||||
isDrawerOpen() {
|
||||
return this.$store.state.docs.isDrawerOpen;
|
||||
},
|
||||
isDrawerOpen2() {
|
||||
return this.$store.getters.drawerState;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toggleDrawer() {
|
||||
this.$store.commit('docs/toggleDrawerState');
|
||||
}
|
||||
},
|
||||
data(context) {
|
||||
console.log("data context.params:" + JSON.stringify(context.params));
|
||||
console.log("data context.route:" + JSON.stringify(context.route));
|
||||
console.log("data context.query:" + JSON.stringify(context.query));
|
||||
|
||||
return {
|
||||
testdata: this.$store.state.docs.example,
|
||||
categories_list: [],
|
||||
markdown_body: '',
|
||||
active_topic: null,
|
||||
active_category: null,
|
||||
options: function () {
|
||||
return {
|
||||
markdownIt: {
|
||||
linkify: true
|
||||
},
|
||||
linkAttributes: {
|
||||
attrs: {
|
||||
target: '_blank',
|
||||
rel: 'noopener'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.container {
|
||||
margin: 0 auto;
|
||||
min-height: 60vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-family: 'Quicksand', 'Source Sans Pro', -apple-system, BlinkMacSystemFont,
|
||||
'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
display: block;
|
||||
font-weight: 300;
|
||||
font-size: 100px;
|
||||
color: #35495e;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-weight: 300;
|
||||
font-size: 42px;
|
||||
color: #526488;
|
||||
word-spacing: 5px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.links {
|
||||
padding-top: 15px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<v-app>
|
||||
<v-main>
|
||||
<div>
|
||||
<v-list v-model="namespaces">
|
||||
<v-list-item v-for="(namespace,idx) in namespaces" :key="idx" :title="namespace.namespace">
|
||||
<div display="inline">ns:{{namespace.namespace + ": " + namespace.show}}</div>
|
||||
<div>ns:{{namespace.namespace + ": " + namespace.show}}</div>
|
||||
<v-list-item-title>{{namespace.namespace}}</v-list-item-title>
|
||||
<v-switch v-model="namespace.show"></v-switch>
|
||||
<!-- <v-list-item-action>-->
|
||||
@@ -28,15 +28,15 @@
|
||||
<!-- <v-list-item><v-label :v-bind="ns"/></v-list-item>-->
|
||||
<!-- {{ns}}-->
|
||||
<!-- </v-list>-->
|
||||
</v-app>
|
||||
</v-main>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import get_namespaces from '~/mixins/get_namespaces.js';
|
||||
// import get_namespaces from '@/mixins/get_namespaces.js';
|
||||
|
||||
export default {
|
||||
name: "namespaces",
|
||||
mixins: [get_namespaces],
|
||||
// mixins: [get_namespaces],
|
||||
data(context) {
|
||||
// return {
|
||||
// namespaces: []
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<!-- https://github.com/Microsoft/vscode-recipes/tree/master/vuejs-cli -->
|
||||
<div class="container">
|
||||
<div class="container" style="justify-content: center; align-content: center; display: flex; width: 100%; margin-left: unset">
|
||||
<!-- <recursive-menu/>-->
|
||||
<div>
|
||||
<logo/>
|
||||
<div style="justify-content: center" align="middle">
|
||||
<logo align="middle" style="justify-content: center; align-content: center"></logo>
|
||||
<h1 class="title">nosqlbench</h1>
|
||||
<h2 class="subtitle">open source, pluggable, nosql benchmarking suite</h2>
|
||||
<div class="links">
|
||||
@@ -25,34 +25,34 @@
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.container {
|
||||
margin: 0 auto;
|
||||
min-height: 60vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
/*.container {*/
|
||||
/* margin: 0 auto;*/
|
||||
/* min-height: 60vh;*/
|
||||
/* display: flex;*/
|
||||
/* justify-content: center;*/
|
||||
/* align-items: center;*/
|
||||
/* text-align: center;*/
|
||||
/*}*/
|
||||
|
||||
.title {
|
||||
font-family: 'Quicksand', 'Source Sans Pro', -apple-system, BlinkMacSystemFont,
|
||||
'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
display: block;
|
||||
font-weight: 300;
|
||||
font-size: 100px;
|
||||
color: #35495e;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
/*.title {*/
|
||||
/* font-family: 'Quicksand', 'Source Sans Pro', -apple-system, BlinkMacSystemFont,*/
|
||||
/* 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;*/
|
||||
/* display: block;*/
|
||||
/* font-weight: 300;*/
|
||||
/* font-size: 100px;*/
|
||||
/* color: #35495e;*/
|
||||
/* letter-spacing: 1px;*/
|
||||
/*}*/
|
||||
|
||||
.subtitle {
|
||||
font-weight: 300;
|
||||
font-size: 42px;
|
||||
color: #526488;
|
||||
word-spacing: 5px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
/*.subtitle {*/
|
||||
/* font-weight: 300;*/
|
||||
/* font-size: 42px;*/
|
||||
/* color: #526488;*/
|
||||
/* word-spacing: 5px;*/
|
||||
/* padding-bottom: 15px;*/
|
||||
/*}*/
|
||||
|
||||
.links {
|
||||
padding-top: 15px;
|
||||
}
|
||||
/*.links {*/
|
||||
/* padding-top: 15px;*/
|
||||
/*}*/
|
||||
</style>
|
||||
|
||||
311
docsys/src/main/node/docsys/pages/ui/build.vue
Normal file
311
docsys/src/main/node/docsys/pages/ui/build.vue
Normal file
@@ -0,0 +1,311 @@
|
||||
<template>
|
||||
<v-app>
|
||||
<main-app-bar>NoSQLBench - Workload Builder</main-app-bar>
|
||||
|
||||
<v-layout>
|
||||
|
||||
<v-main>
|
||||
<v-container fluid>
|
||||
<v-layout row>
|
||||
<v-flex>
|
||||
<v-card>
|
||||
<v-card-title>
|
||||
Workload details
|
||||
</v-card-title>
|
||||
<v-col
|
||||
cols="12"
|
||||
sm="6"
|
||||
md="10"
|
||||
lg="10"
|
||||
>
|
||||
<v-text-field
|
||||
outlined
|
||||
label="Workload name"
|
||||
v-model="workloadName"
|
||||
></v-text-field>
|
||||
|
||||
<v-textarea
|
||||
outlined
|
||||
label="Create Table Statement"
|
||||
v-model="createTableDef"
|
||||
v-on:blur="parseStatement()"
|
||||
></v-textarea>
|
||||
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
<v-btn :title="save_title" v-if="parseSuccess" v-on:click="saveWorkloadToWorkspace()">{{ save_button }}</v-btn>
|
||||
<v-btn :title="dl_title" v-if="parseSuccess" v-on:click="downloadWorkload()">{{ dl_button }}</v-btn>
|
||||
</v-col>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
|
||||
</v-layout>
|
||||
|
||||
|
||||
</v-container>
|
||||
|
||||
</v-main>
|
||||
</v-layout>
|
||||
|
||||
<v-footer app>
|
||||
<span>© 2020</span>
|
||||
</v-footer>
|
||||
|
||||
</v-app>
|
||||
</template>
|
||||
<script>
|
||||
import antlr4 from "antlr4";
|
||||
import {saveAs} from "file-saver";
|
||||
import yamlDumper from "js-yaml";
|
||||
import CQL3Parser from '@/antlr/CQL3Parser.js';
|
||||
import CQL3Lexer from '@/antlr/CQL3Lexer.js';
|
||||
import defaultYaml from 'assets/default.yaml';
|
||||
import basictypes from 'assets/basictypes.yaml';
|
||||
import WorkspaceSelector from "@/components/WorkspaceSelector";
|
||||
import AppSelector from "@/components/AppSelector";
|
||||
import MainAppBar from "@/components/MainAppBar";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
MainAppBar,
|
||||
AppSelector,
|
||||
WorkspaceSelector
|
||||
},
|
||||
data(context) {
|
||||
let data = {
|
||||
enabled: false,
|
||||
createTableDef: "",
|
||||
workloadName: "",
|
||||
parseSuccess: false,
|
||||
blob: null,
|
||||
};
|
||||
return data;
|
||||
},
|
||||
computed: {
|
||||
save_button: function () {
|
||||
return "Save to workspace '" + this.$store.getters["workspaces/getWorkspace"] + "'";
|
||||
},
|
||||
dl_button: function () {
|
||||
return "Download as " + this.filename;
|
||||
},
|
||||
dl_title: function () {
|
||||
return "Click to download the workload as '" + this.filename + "'";
|
||||
},
|
||||
filename: function () {
|
||||
return this.workloadName + ".yaml";
|
||||
},
|
||||
save_title: function () {
|
||||
return "Click to save this workload in the '" + this.workspace + "' workspace, or change the workspace in the app bar first.\n"
|
||||
},
|
||||
workspace: function () {
|
||||
return this.$store.getters["workspaces/getWorkspace"]
|
||||
},
|
||||
enabled: function () {
|
||||
return this.$store.getters["service_status/getEndpoints"]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async parseStatement() {
|
||||
console.log(this.$data.createTableDef);
|
||||
|
||||
const input = this.$data.createTableDef;
|
||||
|
||||
const chars = new antlr4.InputStream(input);
|
||||
const lexer = new CQL3Lexer.CQL3Lexer(chars);
|
||||
|
||||
lexer.strictMode = false; // do not use js strictMode
|
||||
|
||||
const tokens = new antlr4.CommonTokenStream(lexer);
|
||||
const parser = new CQL3Parser.CQL3Parser(tokens);
|
||||
|
||||
const context = parser.create_table_stmt();
|
||||
|
||||
try {
|
||||
const keyspaceName = context.table_name().keyspace_name().getChild(0).getText()
|
||||
const tableName = context.table_name().table_name_noks().getChild(0).getText()
|
||||
|
||||
const columnDefinitions = context.column_definitions().column_definition();
|
||||
|
||||
let columns = [];
|
||||
let partitionKeys = [];
|
||||
let clusteringKeys = [];
|
||||
columnDefinitions.forEach(columnDef => {
|
||||
if (columnDef.column_name() != null) {
|
||||
columns.push({
|
||||
"name": columnDef.column_name().getText(),
|
||||
"type": columnDef.column_type().getText()
|
||||
})
|
||||
} else {
|
||||
const primaryKeyContext = columnDef.primary_key()
|
||||
if (primaryKeyContext.partition_key() != null) {
|
||||
const partitionKeysContext = primaryKeyContext.partition_key().column_name();
|
||||
partitionKeysContext.map((partitionKey, i) => {
|
||||
const partitionKeyName = partitionKey.getText()
|
||||
const col = {
|
||||
"name": partitionKeyName,
|
||||
"type": columns.filter(x => x.name == partitionKeyName)[0].type
|
||||
}
|
||||
partitionKeys.push(col)
|
||||
})
|
||||
}
|
||||
if (primaryKeyContext.clustering_column().length != 0) {
|
||||
const clusteringKeysContext = primaryKeyContext.clustering_column();
|
||||
clusteringKeysContext.map((clusteringKey, i) => {
|
||||
const clusteringKeyName = clusteringKey.getText()
|
||||
const col = {
|
||||
"name": clusteringKeyName,
|
||||
"type": columns.filter(x => x.name == clusteringKeyName)[0].type
|
||||
}
|
||||
clusteringKeys.push(col)
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
columns = columns.filter(col => {
|
||||
return partitionKeys.filter(pk => pk.name == col.name).length == 0 && clusteringKeys.filter(cc => cc.name == col.name).length == 0
|
||||
})
|
||||
|
||||
const allColumns = [].concat(columns, partitionKeys, clusteringKeys)
|
||||
|
||||
this.$data.tableName = tableName;
|
||||
this.$data.keyspaceName = keyspaceName;
|
||||
this.$data.columns = columns;
|
||||
this.$data.clusteringKeys = clusteringKeys;
|
||||
this.$data.partitionKeys = partitionKeys;
|
||||
this.$data.allColumns = allColumns;
|
||||
|
||||
console.log(this.$data)
|
||||
|
||||
console.log(defaultYaml)
|
||||
|
||||
// schema and bindings
|
||||
let createTableStatement = "CREATE TABLE IF NOT EXISTS <<keyspace:" + keyspaceName + ">>." + tableName + " (\n";
|
||||
|
||||
console.log(basictypes)
|
||||
defaultYaml.bindings = {}
|
||||
allColumns.forEach(column => {
|
||||
let recipe = basictypes.bindings[column.type + "val"];
|
||||
if (recipe == undefined) {
|
||||
const chars = new antlr4.InputStream(column.type);
|
||||
const lexer = new CQL3Lexer.CQL3Lexer(chars);
|
||||
lexer.strictMode = false; // do not use js strictMode
|
||||
const tokens = new antlr4.CommonTokenStream(lexer);
|
||||
const parser = new CQL3Parser.CQL3Parser(tokens);
|
||||
|
||||
const typeContext = parser.column_type();
|
||||
const collectionTypeContext = typeContext.data_type().collection_type();
|
||||
const collectionType = collectionTypeContext.children[0].getText();
|
||||
if (collectionType.toLowerCase() == "set") {
|
||||
const type = collectionTypeContext.children[2].getText();
|
||||
recipe = "Set(HashRange(1,<<set-count-" + column.name + ":5>>)," + basictypes.bindings[type + "val"] + ") -> java.util.Set"
|
||||
} else if (collectionType.toLowerCase() == "list") {
|
||||
const type = collectionTypeContext.children[2].getText();
|
||||
recipe = "List(HashRange(1,<<list-count-" + column.name + ":5>>)," + basictypes.bindings[type + "val"] + ") -> java.util.List"
|
||||
|
||||
} else if (collectionType.toLowerCase() == "map") {
|
||||
const type1 = collectionTypeContext.children[2].getText();
|
||||
const type2 = collectionTypeContext.children[4].getText();
|
||||
recipe = "Map(HashRange(1,<<map-count-" + column.name + ":5>>)," + basictypes.bindings[type1 + "val"] + "," + basictypes.bindings[type2 + "val"] + ") -> java.util.Map"
|
||||
} else {
|
||||
alert("Could not generate recipe for type: " + column.type + " for column: " + column.name)
|
||||
}
|
||||
}
|
||||
defaultYaml.bindings[column.name] = recipe
|
||||
createTableStatement = createTableStatement + column.name + " " + column.type + ",\n";
|
||||
})
|
||||
|
||||
let pk = "PRIMARY KEY (("
|
||||
pk = pk + partitionKeys.map(x => x.name).reduce((x, acc) => acc = acc + "," + x)
|
||||
pk = pk + ")"
|
||||
if (clusteringKeys.length > 0) {
|
||||
pk = pk + "," + clusteringKeys.map(x => x.name).reduce((x, acc) => acc = acc + "," + x)
|
||||
}
|
||||
pk = pk + ")"
|
||||
createTableStatement = createTableStatement + pk + "\n);"
|
||||
defaultYaml.blocks[0].statements[0] = {"create-table": createTableStatement}
|
||||
|
||||
//rampup
|
||||
let insertStatement = "INSERT INTO <<keyspace:" + keyspaceName + ">>." + tableName + " (\n";
|
||||
insertStatement = insertStatement + allColumns.map(x => x.name).reduce((x, acc) => acc = acc + ",\n" + x) + "\n) VALUES (\n";
|
||||
insertStatement = insertStatement + allColumns.map(x => "{" + x.name + "}").reduce((x, acc) => acc = acc + ",\n" + x) + "\n);"
|
||||
|
||||
defaultYaml.blocks[1].statements[0] = {"insert-rampup": insertStatement}
|
||||
|
||||
//main-write
|
||||
defaultYaml.blocks[2].statements[0] = {"insert-main": insertStatement}
|
||||
|
||||
//main-read-partition
|
||||
let readPartitionStatement = "SELECT * from <<keyspace:" + keyspaceName + ">>." + tableName + " WHERE ";
|
||||
readPartitionStatement = readPartitionStatement + partitionKeys.map(x => x.name + "={" + x.name + "}").reduce((x, acc) => acc = acc + " AND " + x);
|
||||
let readRowStatement = readPartitionStatement + ";";
|
||||
if (clusteringKeys.length > 0) {
|
||||
readPartitionStatement = readPartitionStatement + " AND " + clusteringKeys.map(x => x.name + "={" + x.name + "}").reduce((x, acc) => acc = acc + " AND " + x);
|
||||
}
|
||||
readPartitionStatement = readPartitionStatement + ";";
|
||||
|
||||
defaultYaml.blocks[3].statements[0] = {"read-partition": readPartitionStatement}
|
||||
|
||||
//main-read-row
|
||||
defaultYaml.blocks[4].statements[0] = {"read-row": readRowStatement}
|
||||
|
||||
defaultYaml.description = this.$data.workloadName
|
||||
|
||||
const yamlOutputText = yamlDumper.dump(defaultYaml)
|
||||
this.blob = new Blob([yamlOutputText], {type: "text/plain;charset=utf-8"});
|
||||
this.parseSuccess = true;
|
||||
} catch (e) {
|
||||
console.log("blur, invalid create table def")
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
},
|
||||
downloadWorkload() {
|
||||
saveAs(this.blob, this.$data.filename);
|
||||
},
|
||||
saveWorkloadToWorkspace() {
|
||||
this.$store.dispatch("workspaces/putFile",{
|
||||
workspace: this.workspace,
|
||||
filename: this.filename,
|
||||
content: this.blob
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$store.dispatch('service_status/loadEndpoints')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
/*.container {*/
|
||||
/* margin: 0 auto;*/
|
||||
/* display: flex;*/
|
||||
/* justify-content: center;*/
|
||||
/* align-items: center;*/
|
||||
/* text-align: center;*/
|
||||
/*}*/
|
||||
|
||||
/*.title {*/
|
||||
/* font-family: 'Quicksand', 'Source Sans Pro', -apple-system, BlinkMacSystemFont,*/
|
||||
/* 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;*/
|
||||
/* display: block;*/
|
||||
/* font-weight: 300;*/
|
||||
/* font-size: 100px;*/
|
||||
/* color: #35495e;*/
|
||||
/* letter-spacing: 1px;*/
|
||||
/*}*/
|
||||
|
||||
/*.subtitle {*/
|
||||
/* font-weight: 300;*/
|
||||
/* font-size: 42px;*/
|
||||
/* color: #526488;*/
|
||||
/* word-spacing: 5px;*/
|
||||
/* padding-bottom: 15px;*/
|
||||
/*}*/
|
||||
|
||||
/*.links {*/
|
||||
/* padding-top: 15px;*/
|
||||
/*}*/
|
||||
</style>
|
||||
@@ -1,159 +1,16 @@
|
||||
<template>
|
||||
<v-app>
|
||||
|
||||
<v-app-bar app dark color="secondary">
|
||||
<v-toolbar-title>NoSQLBench</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-toolbar-items>
|
||||
<v-btn text href="https://github.com/nosqlbench/nosqlbench/wiki/Submitting-Feedback">SUBMIT FEEDBACK</v-btn>
|
||||
</v-toolbar-items>
|
||||
</v-app-bar>
|
||||
|
||||
<v-layout
|
||||
justify-center
|
||||
align-center>
|
||||
|
||||
<v-content>
|
||||
<v-container fluid v-if="enabled">
|
||||
|
||||
<v-select
|
||||
:items="workloadNames"
|
||||
v-model="workloadName"
|
||||
chips
|
||||
v-on:change="getTemplates();"
|
||||
label="Workload"
|
||||
></v-select>
|
||||
|
||||
</v-container>
|
||||
|
||||
<v-container fluid>
|
||||
<v-row
|
||||
v-if="templates"
|
||||
>
|
||||
<v-col
|
||||
cols="12"
|
||||
sm="6"
|
||||
md="10"
|
||||
lg="10"
|
||||
>
|
||||
|
||||
<v-card>
|
||||
<v-card-title>
|
||||
{{ workloadName }}
|
||||
</v-card-title>
|
||||
<v-col
|
||||
v-for="(item, j) in Object.keys(templates)"
|
||||
:key="item.command"
|
||||
cols="12"
|
||||
sm="6"
|
||||
md="10"
|
||||
lg="10"
|
||||
>
|
||||
<v-text-field
|
||||
v-model="templates[item]"
|
||||
:label="item"
|
||||
>{{ item.name }}</v-text-field>
|
||||
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
<v-btn v-if="workloadName" v-on:click="runWorkload()">Run Workload</v-btn>
|
||||
</v-col>
|
||||
</v-card>
|
||||
</v-col>
|
||||
|
||||
</v-row>
|
||||
|
||||
|
||||
</v-container>
|
||||
|
||||
</v-content>
|
||||
</v-layout>
|
||||
|
||||
<v-footer app dark color="secondary">
|
||||
<span>© 2020</span>
|
||||
</v-footer>
|
||||
|
||||
</v-app>
|
||||
<v-app>
|
||||
<main-app-bar></main-app-bar>
|
||||
</v-app>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import get_data from '~/mixins/get_data.js';
|
||||
|
||||
export default {
|
||||
mixins: [get_data],
|
||||
components: {
|
||||
},
|
||||
computed: {
|
||||
},
|
||||
methods: {
|
||||
async getTemplates() {
|
||||
const data = await this.$axios.$get('/services/nb/parameters?workloadName=' + this.workloadName)
|
||||
if (!data.err) {
|
||||
this.$data.templates = data;
|
||||
}
|
||||
},
|
||||
},
|
||||
data(context) {
|
||||
let data = {
|
||||
workloadNames: [],
|
||||
enabled: false,
|
||||
workloadName: null,
|
||||
templates: null,
|
||||
};
|
||||
return data;
|
||||
},
|
||||
async asyncData({ $axios, store }) {
|
||||
let enabled = await $axios.$get("/services/nb/enabled")
|
||||
.then(res => {
|
||||
return res
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log("back-end not found");
|
||||
})
|
||||
let workloadNames = await $axios.$get("/services/nb/workloads")
|
||||
.then(res => {
|
||||
return res
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log("back-end not found");
|
||||
})
|
||||
|
||||
|
||||
return {
|
||||
enabled: enabled,
|
||||
workloadNames: workloadNames,
|
||||
}
|
||||
},
|
||||
}
|
||||
import MainAppBar from "~/components/MainAppBar";
|
||||
export default {
|
||||
name: "ui-index",
|
||||
components: {MainAppBar}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.container {
|
||||
margin: 0 auto;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-family: 'Quicksand', 'Source Sans Pro', -apple-system, BlinkMacSystemFont,
|
||||
'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
display: block;
|
||||
font-weight: 300;
|
||||
font-size: 100px;
|
||||
color: #35495e;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-weight: 300;
|
||||
font-size: 42px;
|
||||
color: #526488;
|
||||
word-spacing: 5px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.links {
|
||||
padding-top: 15px;
|
||||
}
|
||||
</style>
|
||||
|
||||
322
docsys/src/main/node/docsys/pages/ui/run.vue
Normal file
322
docsys/src/main/node/docsys/pages/ui/run.vue
Normal file
@@ -0,0 +1,322 @@
|
||||
<template>
|
||||
<v-app>
|
||||
<main-app-bar>NoSQLBench - Workload Executor</main-app-bar>
|
||||
<v-container class="d-flex justify-center">
|
||||
|
||||
<v-main>
|
||||
<v-row fluid class="d-flex">
|
||||
<v-col cols="12" fluid class="d-flex justify-space-between justify-center">
|
||||
|
||||
<!-- <v-btn-toggle max="1" v-model="toggle_workspaces" @change="validateAndSearch()">-->
|
||||
|
||||
<!-- <v-btn :disabled="this.toggle_builtins===undefined && this.toggle_workspaces===0">-->
|
||||
<!-- <v-container fluid class="d-flex">-->
|
||||
<!-- <v-icon title="'include ' + workspace">mdi-folder-star</v-icon>-->
|
||||
<!-- <div class="ma-2">workspace '{{ workspace }}'</div>-->
|
||||
<!-- <v-icon v-if="this.toggle_workspaces===0">mdi-check</v-icon>-->
|
||||
<!-- </v-container>-->
|
||||
<!-- </v-btn>-->
|
||||
|
||||
<!-- <v-btn :disabled="this.toggle_builtins===undefined && this.toggle_workspaces===1">-->
|
||||
<!-- <v-container fluid class="d-flex">-->
|
||||
<!-- <v-icon title="search workspaces">mdi-folder-star-multiple</v-icon>-->
|
||||
<!-- <div class="ma-2">all workspaces</div>-->
|
||||
<!-- <v-icon v-if="this.toggle_workspaces===1">mdi-check</v-icon>-->
|
||||
<!-- </v-container>-->
|
||||
<!-- </v-btn>-->
|
||||
<!-- </v-btn-toggle>-->
|
||||
|
||||
<v-btn-toggle v-model="toggle_builtins" @change="validateAndSearch()">
|
||||
<v-btn :disabled="this.toggle_workspaces===undefined">
|
||||
<v-container fluid class="d-flex">
|
||||
<v-icon title="include built-in workloads">mdi-folder-open</v-icon>
|
||||
<div class="ma-2">bundled</div>
|
||||
<v-icon v-if="this.toggle_builtins===0">mdi-check</v-icon>
|
||||
|
||||
</v-container>
|
||||
</v-btn>
|
||||
</v-btn-toggle>
|
||||
|
||||
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
<v-row fluid v-if="workloads!==undefined">
|
||||
|
||||
<!-- :item-text="workspace"-->
|
||||
<!-- :item-value="workloadName"-->
|
||||
<!-- v-model="workloadName"-->
|
||||
<v-select
|
||||
:items="availableWorkloads"
|
||||
item-text="workloadName"
|
||||
item-value="workloadName"
|
||||
v-model="selected"
|
||||
v-on:change="loadTemplates()"
|
||||
label="Workload"
|
||||
></v-select>
|
||||
|
||||
</v-row>
|
||||
|
||||
<!-- TEMPLATES -->
|
||||
|
||||
<v-main justify-start align-start class="d-inline-block pa-4 ma-10">
|
||||
<v-row no-gutters v-if="templates">
|
||||
<v-card v-for="(item, j) in Object.keys(templateparams)"
|
||||
:key="item"
|
||||
class="ma-4 pa-4"
|
||||
>
|
||||
<!-- <v-card-title>{{item}}</v-card-title>-->
|
||||
<v-card-title class="ma-0 pa-0">{{ item }}</v-card-title>
|
||||
<v-text-field hide-details v-model="templateparams[item]" align="center"></v-text-field>
|
||||
<!-- <v-card-title>{{ this.workloadName }}</v-card-title>-->
|
||||
<!-- <v-row v-for="(item, j) in Object.keys(templates)" :key="item.command">-->
|
||||
<!-- <v-text-field v-model="templates[item]" :label="item">{{ item.name }}></v-text-field>-->
|
||||
<!-- </v-row>-->
|
||||
</v-card>
|
||||
</v-row>
|
||||
|
||||
<!-- <v-row v-if="templates">-->
|
||||
<!-- <v-col>-->
|
||||
<!-- <v-card>-->
|
||||
<!-- <v-card-title>{{ this.workloadName }}</v-card-title>-->
|
||||
<!-- <v-row v-for="(item, j) in Object.keys(templates)" :key="item.command">-->
|
||||
<!-- <v-text-field v-model="templates[item]" :label="item">{{ item.name }}></v-text-field>-->
|
||||
<!-- </v-row>-->
|
||||
<!-- </v-card>-->
|
||||
<!-- </v-col>-->
|
||||
<!-- </v-row>-->
|
||||
|
||||
<v-row>
|
||||
<v-col></v-col>
|
||||
</v-row>
|
||||
|
||||
<v-row>
|
||||
<v-col cols="12">
|
||||
<v-btn :title="runtitle" v-if="this.selected" v-on:click="runWorkload()">{{ runin }}</v-btn>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
</v-main>
|
||||
|
||||
</v-main>
|
||||
</v-container>
|
||||
|
||||
<v-footer app>
|
||||
<span>© 2020</span>
|
||||
</v-footer>
|
||||
|
||||
</v-app>
|
||||
</template>
|
||||
<script>
|
||||
import WorkspaceSelector from "@/components/WorkspaceSelector";
|
||||
import AppSelector from "@/components/AppSelector";
|
||||
import MainAppBar from "@/components/MainAppBar";
|
||||
|
||||
export default {
|
||||
name: 'app-run',
|
||||
components: {
|
||||
AppSelector,
|
||||
WorkspaceSelector,
|
||||
MainAppBar
|
||||
},
|
||||
data(context) {
|
||||
let data = {
|
||||
extraparams: {},
|
||||
templateparams: {},
|
||||
availableWorkloads: [],
|
||||
enabled: false,
|
||||
selected: null,
|
||||
toggle_builtins: false,
|
||||
toggle_workspaces: 0,
|
||||
workspace_names: ['current', 'all'],
|
||||
sample: {
|
||||
"workspace": "default",
|
||||
"yamlPath": "test1.yaml",
|
||||
"scenarioNames": [
|
||||
"default",
|
||||
"main"
|
||||
],
|
||||
"templates": {
|
||||
"keyspace": "a",
|
||||
"main-cycles": "10000000",
|
||||
"rampup-cycles": "10000000",
|
||||
"read_cl": "LOCAL_QUORUM",
|
||||
"read_partition_ratio": "1",
|
||||
"read_row_ratio": "1",
|
||||
"write_cl": "LOCAL_QUORUM",
|
||||
"write_ratio": "1"
|
||||
},
|
||||
"description": "test1",
|
||||
"workloadName": "test1"
|
||||
},
|
||||
};
|
||||
return data;
|
||||
},
|
||||
computed: {
|
||||
searchin: function () {
|
||||
let searchin = Array();
|
||||
if (this.toggle_workspaces === 0) {
|
||||
searchin.push(this.workspace);
|
||||
} else if (this.toggle_workspaces === 1) {
|
||||
console.log("workspaces typeof: '" + typeof (this.workspaces) + "'");
|
||||
this.workspaces.forEach(w => {
|
||||
searchin.push(w.name);
|
||||
})
|
||||
}
|
||||
if (this.toggle_builtins === 0) {
|
||||
searchin.push("builtins");
|
||||
}
|
||||
let joined = searchin.join(",");
|
||||
console.log("joined:'" + joined + "'")
|
||||
return joined;
|
||||
},
|
||||
runin: function () {
|
||||
return "Run Workload";
|
||||
},
|
||||
runtitle: function () {
|
||||
return "Run this workload in workspace [" + this.workspace + "].\n"
|
||||
},
|
||||
workspace: function () {
|
||||
return this.$store.getters["workspaces/getWorkspace"]
|
||||
},
|
||||
workspaces: function () {
|
||||
return this.$store.getters["workspaces/getWorkspaces"]
|
||||
},
|
||||
workloads: function () {
|
||||
return this.$store.getters["workloads/getWorkloads"];
|
||||
},
|
||||
templates: function () {
|
||||
return this.$store.getters["workloads/getTemplates"];
|
||||
}
|
||||
// ,
|
||||
// workloadNames: function () {
|
||||
// for (const [key, value] of Object.entries(this.workloads)) {
|
||||
// console.log("key=[" + key + "] value=[" + value + "]");
|
||||
// }
|
||||
// }
|
||||
},
|
||||
watch: {
|
||||
toggle_builtins: function (val) {
|
||||
this.validateAndSearch();
|
||||
},
|
||||
toggle_workspaces: function (val) {
|
||||
this.validateAndSearch();
|
||||
},
|
||||
templates: function (val) {
|
||||
console.log("templates property changed");
|
||||
if (val === undefined) {
|
||||
this.templateparams = undefined;
|
||||
} else {
|
||||
this.templateparams = {};
|
||||
Object.keys(val).forEach(k => {
|
||||
console.log("k:" + k + " = " + val[k])
|
||||
if (!this.templateparams[k]) {
|
||||
this.templateparams[k] = val[k];
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.validateAndSearch();
|
||||
this.$store.subscribe((mutation, state) => {
|
||||
if (mutation.type === 'workloads/setWorkloads') {
|
||||
// console.log("detected update to workloads:" + JSON.stringify(this.workloads));
|
||||
this.availableWorkloads = state.workloads.workloads;
|
||||
} else if (mutation.type === 'workspaces/setWorkspace') {
|
||||
// console.log("detected update to workspace:" + JSON.stringify(this.workspace));
|
||||
this.validateAndSearch();
|
||||
}
|
||||
// else if (mutation.type === 'workloads/setTemplates') {
|
||||
// console.log("detected update to templates:" + JSON.stringify(this.workspace));
|
||||
// Object.keys(this.templates).forEach(t => {
|
||||
// console.log("template:" + t)
|
||||
// if (this.templateparams[t]) {
|
||||
// this.templateparams[t] = this.templates[t];
|
||||
// console.log("added '" + this.templates[t])
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
validateAndSearch() {
|
||||
let params = {
|
||||
searchin: this.searchin,
|
||||
reason: "search params changed"
|
||||
}
|
||||
this.$store.dispatch("workloads/fetchWorkloads", params);
|
||||
},
|
||||
loadTemplates() {
|
||||
let params = {
|
||||
workload: this.selected,
|
||||
searchin: this.searchin,
|
||||
reason: "workload selected"
|
||||
}
|
||||
this.$store.dispatch("workloads/fetchTemplates", params);
|
||||
let templates = this.$store.getters["workloads/getTemplates"]
|
||||
|
||||
console.log("templates?" + JSON.stringify(templates, null, 2))
|
||||
// Object.keys(this.templates).forEach(t => {
|
||||
// console.log("t:" + t)
|
||||
// // if (!this.templateparams[t]) {
|
||||
// // this.templateparams[t]=this.templates[t];
|
||||
// // }
|
||||
// })
|
||||
},
|
||||
runWorkload() {
|
||||
console.log("running workload '" + this.selected + "'")
|
||||
// let workload = this.availableWorkloads.find(w => w.workloadName === this.selected);
|
||||
let commands=[];
|
||||
|
||||
commands.push(this.selected);
|
||||
Object.keys(this.templates).forEach(k => {
|
||||
if (this.templateparams && this.templateparams[k]!==this.templates[k]) {
|
||||
commands.push(k+"="+this.templateparams[k])
|
||||
}
|
||||
})
|
||||
Object.keys(this.extraparams).forEach(k => {
|
||||
commands.push(k+"="+this.extraparams[k])
|
||||
})
|
||||
let erq = {
|
||||
scenario_name: this.selected + "_DATESTAMP",
|
||||
workspace: this.workspace,
|
||||
commands
|
||||
}
|
||||
console.log("submitting:" + JSON.stringify(erq));
|
||||
this.$store.dispatch("scenarios/runScenario", erq);
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
/*.container {*/
|
||||
/* margin: 0 auto;*/
|
||||
/* display: flex;*/
|
||||
/* justify-content: center;*/
|
||||
/* align-items: center;*/
|
||||
/* text-align: center;*/
|
||||
/*}*/
|
||||
|
||||
/*.title {*/
|
||||
/* font-family: 'Quicksand', 'Source Sans Pro', -apple-system, BlinkMacSystemFont,*/
|
||||
/* 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;*/
|
||||
/* display: block;*/
|
||||
/* font-weight: 300;*/
|
||||
/* font-size: 100px;*/
|
||||
/* color: #35495e;*/
|
||||
/* letter-spacing: 1px;*/
|
||||
/*}*/
|
||||
|
||||
/*.subtitle {*/
|
||||
/* font-weight: 300;*/
|
||||
/* font-size: 42px;*/
|
||||
/* color: #526488;*/
|
||||
/* word-spacing: 5px;*/
|
||||
/* padding-bottom: 15px;*/
|
||||
/*}*/
|
||||
|
||||
/*.links {*/
|
||||
/* padding-top: 15px;*/
|
||||
/*}*/
|
||||
</style>
|
||||
226
docsys/src/main/node/docsys/pages/ui/watch.vue
Normal file
226
docsys/src/main/node/docsys/pages/ui/watch.vue
Normal file
@@ -0,0 +1,226 @@
|
||||
<template>
|
||||
<v-app>
|
||||
<main-app-bar>NoSQLBench - Execution Status</main-app-bar>
|
||||
|
||||
<v-main justify-start align-start class="d-inline-block pa-4 ma-10">
|
||||
<div class="row no-gutters">
|
||||
|
||||
<!-- SCENARIO CARD -->
|
||||
|
||||
<v-card min-width="300" max-width="300" max-height="400" raised elevation="3"
|
||||
v-for="(scenario,w) in scenarios" :key="w"
|
||||
class="pa-4 ma-4"
|
||||
:title="JSON.stringify(scenario,null,2)"
|
||||
:color="scenario.state==='Running' ? 'accent' : 'default'">
|
||||
|
||||
<v-row align-content="start" align="start">
|
||||
<v-card-title>{{ scenario.scenario_name }}</v-card-title>
|
||||
<v-card-subtitle>{{ scenario.state }}</v-card-subtitle>
|
||||
<!-- <v-icon>mdi-magnify</v-icon>-->
|
||||
</v-row>
|
||||
|
||||
<!-- Scenario Controls -->
|
||||
|
||||
<v-row>
|
||||
<v-btn
|
||||
v-if="scenario.state==='Running'"
|
||||
@click="stop_scenario(scenario)"
|
||||
:title="'Stop scenario ' + scenario.scenario_name"
|
||||
><v-icon>mdi-stop</v-icon>
|
||||
|
||||
</v-btn>
|
||||
<!-- <v-btn v-if="scenario.state!=='Running'">-->
|
||||
<!-- <v-icon>mdi-play</v-icon>-->
|
||||
<!-- </v-btn>-->
|
||||
<v-btn v-if="scenario.state==='Finished' || scenario.state==='Errored'"
|
||||
:title="'Purge scenario ' + scenario.scenario_name"
|
||||
@click="purge_scenario(scenario)"
|
||||
><v-icon>mdi-delete</v-icon>
|
||||
</v-btn>
|
||||
|
||||
<v-btn v-if="scenario.state==='Scheduled'"
|
||||
:title="'cancel scenario ' + scenario.scenario_name"
|
||||
@click="purge_scenario(scenario)"
|
||||
><v-icon>mdi-cancel</v-icon></v-btn>
|
||||
</v-row>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<!-- Activities -->
|
||||
<!-- <v-card-subtitle>activities:</v-card-subtitle>-->
|
||||
<v-row v-for="(progress,p) in scenario.progress" :key="p">
|
||||
<v-card min-width="290" :title="JSON.stringify(progress,null,2)">
|
||||
<v-card-subtitle class="pa-2 ma-2">{{ progress.name }}</v-card-subtitle>
|
||||
<v-progress-linear v-if="progress.completed"
|
||||
:title="(progress.completed*100.0).toFixed(4)"
|
||||
:value="progress_of(progress.completed)"
|
||||
:color="colorof(progress.state)"
|
||||
height="10"
|
||||
></v-progress-linear>
|
||||
<v-card-text v-if="progress.state==='Running'">
|
||||
{{ (progress.eta_millis / 60000).toFixed(2) + " minutes remaining" }}
|
||||
</v-card-text>
|
||||
<v-card-text v-if="scenario.result && scenario.result.error">
|
||||
{{ JSON.stringify(scenario.result.error, null, 2) }}
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-row>
|
||||
</v-card>
|
||||
|
||||
|
||||
</div>
|
||||
</v-main>
|
||||
|
||||
|
||||
<!-- FOOTER -->
|
||||
|
||||
<v-footer :color="this.paused ? 'secondary' : 'unset'" app>
|
||||
<v-row align="middle">
|
||||
|
||||
<v-progress-circular color="#AAAAAA"
|
||||
width="1"
|
||||
:title="'refresh in '+(this.beats_per_refresh-this.beats_in_refresh) + 's (' + this.beats_per_suffix + ')'"
|
||||
:value="(this.beats_in_refresh/this.beats_per_refresh)*100"
|
||||
@click="do_refresh"
|
||||
>{{ beats_per_refresh - beats_in_refresh }}
|
||||
</v-progress-circular>
|
||||
<v-icon v-if="!this.paused" @click="pause()">mdi-pause</v-icon>
|
||||
<v-icon v-if="this.paused" @click="unpause()">mdi-play</v-icon>
|
||||
<v-icon @click="scale_up">mdi-plus</v-icon>
|
||||
<v-icon @click="scale_down">mdi-minus</v-icon>
|
||||
</v-row>
|
||||
</v-footer>
|
||||
|
||||
</v-app>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import WorkspaceSelector from "@/components/WorkspaceSelector";
|
||||
import {mapActions, mapGetters, mapMutations} from "vuex";
|
||||
import AppSelector from "@/components/AppSelector";
|
||||
import MainAppBar from "@/components/MainAppBar";
|
||||
|
||||
export default {
|
||||
name: "workspaces.vue",
|
||||
components: {
|
||||
MainAppBar,
|
||||
AppSelector,
|
||||
WorkspaceSelector
|
||||
},
|
||||
data(context) {
|
||||
let data = {
|
||||
beat: false,
|
||||
beats_per_refresh: 10,
|
||||
beats_in_refresh: 0,
|
||||
beats_per_suffix: '10s',
|
||||
scales: [
|
||||
[1, '1s'], [5, '5s'], [10, '10s'], [20, '20s'], [60, '60s'], [300, '5m'], [600, '10m'], [1800, '15m']
|
||||
],
|
||||
beat_tick: 1000,
|
||||
heart_is_beating: false,
|
||||
paused: false,
|
||||
|
||||
};
|
||||
return data;
|
||||
},
|
||||
computed: {
|
||||
scenarios: {
|
||||
get() {
|
||||
return this.$store.getters["scenarios/getScenarios"]
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
colorof(state) {
|
||||
if (state==='Running') {
|
||||
return "success";
|
||||
}
|
||||
if (state==='Errored') {
|
||||
return "error"
|
||||
}
|
||||
return "blue";
|
||||
},
|
||||
scale_up() {
|
||||
let idx =Array.from(Array(this.scales.length), (x,i) => i)
|
||||
.find(y => {return this.scales[y][0]===this.beats_per_refresh})
|
||||
idx = Math.min(idx+1,this.scales.length-1);
|
||||
console.log("idx:"+idx)
|
||||
this.beats_per_refresh=this.scales[idx][0];
|
||||
this.beats_per_suffix = this.scales[idx][1];
|
||||
},
|
||||
scale_down() {
|
||||
let idx =Array.from(Array(this.scales.length), (x,i) => i)
|
||||
.find(y => {return this.scales[y][0]===this.beats_per_refresh})
|
||||
idx = Math.max(idx-1,0);
|
||||
console.log("idx:"+idx)
|
||||
this.beats_per_refresh=this.scales[idx][0];
|
||||
this.beats_per_suffix = this.scales[idx][1];
|
||||
},
|
||||
stop_scenario(scenario) {
|
||||
console.log("stopping scenario: " + scenario.scenario_name);
|
||||
this.$store.dispatch("scenarios/stopScenario", scenario.scenario_name)
|
||||
this.do_refresh();
|
||||
},
|
||||
purge_scenario(scenario) {
|
||||
console.log("purging scenario: " + scenario.scenario_name);
|
||||
this.$store.dispatch("scenarios/deleteScenario", scenario.scenario_name);
|
||||
this.do_refresh();
|
||||
},
|
||||
pause() {
|
||||
this.paused = true;
|
||||
},
|
||||
unpause() {
|
||||
this.paused = false;
|
||||
this.heartbeat();
|
||||
},
|
||||
heartbeat() {
|
||||
this.heart_is_beating = false;
|
||||
if (this.paused) {
|
||||
return;
|
||||
}
|
||||
let seconds = new Date().getSeconds();
|
||||
// console.log("seconds:" + seconds);
|
||||
this.beat = (seconds % 2) === 0;
|
||||
this.beats_in_refresh++;
|
||||
if (this.beats_in_refresh >= this.beats_per_refresh) {
|
||||
this.do_refresh();
|
||||
}
|
||||
if (!this.heart_is_beating) {
|
||||
this.heart_is_beating = true;
|
||||
setTimeout(this.heartbeat, this.beat_tick);
|
||||
}
|
||||
},
|
||||
do_refresh() {
|
||||
this.beats_in_refresh = 0;
|
||||
this.$store.dispatch("scenarios/loadScenarios", "timer refresh")
|
||||
},
|
||||
progress_of(completion) {
|
||||
if (isNaN(completion)) {
|
||||
return undefined;
|
||||
}
|
||||
let progress = (completion * 100.0).toFixed(2);
|
||||
return progress;
|
||||
},
|
||||
is_running(scenario) {
|
||||
return scenario.progress.find(x => {
|
||||
return x.state === "Running"
|
||||
});
|
||||
},
|
||||
abbrev(name) {
|
||||
return name;
|
||||
}
|
||||
},
|
||||
created() {
|
||||
console.log("created component...");
|
||||
this.$store.dispatch("scenarios/loadScenarios", "watch panel load");
|
||||
},
|
||||
mounted() {
|
||||
setTimeout(this.heartbeat, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
129
docsys/src/main/node/docsys/pages/ui/workspaces.vue
Normal file
129
docsys/src/main/node/docsys/pages/ui/workspaces.vue
Normal file
@@ -0,0 +1,129 @@
|
||||
<template>
|
||||
<v-app>
|
||||
<main-app-bar></main-app-bar>
|
||||
|
||||
<!-- <workspace-selector @changed="seenChange(workspace)"></workspace-selector>-->
|
||||
|
||||
<!-- <v-btn title="start a new workspace" @click="startNewWorkspace()">-->
|
||||
<!-- <v-icon>mdi-folder-plus-outline</v-icon>-->
|
||||
<!-- </v-btn>-->
|
||||
|
||||
<!-- <v-btn icon title="upload a workspace zip file">-->
|
||||
<!-- <v-icon>mdi-folder-upload</v-icon>-->
|
||||
<!-- </v-btn>-->
|
||||
<!-- <v-btn icon title="download workspaces.zip">-->
|
||||
<!-- <v-icon>mdi-briefcase-download</v-icon>-->
|
||||
<!-- </v-btn>-->
|
||||
<!-- <v-btn icon title="upload workspaces.zip">-->
|
||||
<!-- <v-icon>mdi-briefcase-upload</v-icon>-->
|
||||
<!-- </v-btn>-->
|
||||
|
||||
<v-content justify-start align-start class="d-inline-block pa-4 ma-10">
|
||||
<div class="row no-gutters">
|
||||
<v-card min-width="300" max-width="300" max-height="400" raised elevation="5" v-for="(cardspace,w) in workspaces" :key="w"
|
||||
class="pa-4 ma-4">
|
||||
<v-row>
|
||||
<v-card-title title="workspace name">{{ cardspace.name }}</v-card-title>
|
||||
<v-icon v-if="workspace === cardspace.name">mdi-check-bold</v-icon>
|
||||
</v-row>
|
||||
|
||||
<v-card-subtitle title="last change">{{ abbrev(cardspace.summary.last_changed_filename) }}</v-card-subtitle>
|
||||
<v-divider></v-divider>
|
||||
<v-list align-start>
|
||||
<v-simple-table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Bytes</td>
|
||||
<td>{{ cardspace.summary.total_bytes }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Files</td>
|
||||
<td>{{ cardspace.summary.total_files }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</v-simple-table>
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-list-item>
|
||||
<v-btn title="view details of workspace">
|
||||
<v-icon>mdi-magnify</v-icon>
|
||||
</v-btn>
|
||||
|
||||
<v-spacer></v-spacer>
|
||||
|
||||
<v-btn title="download zipped workspace">
|
||||
<v-icon>mdi-folder-download</v-icon>
|
||||
</v-btn>
|
||||
|
||||
<v-spacer></v-spacer>
|
||||
|
||||
<v-btn title="purge workspace">
|
||||
<v-icon @click="purgeWorkspace(cardspace.name)">mdi-trash-can</v-icon>
|
||||
</v-btn>
|
||||
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</v-card>
|
||||
</div>
|
||||
</v-content>
|
||||
|
||||
</v-app>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import WorkspaceSelector from "@/components/WorkspaceSelector";
|
||||
import {mapActions, mapGetters, mapMutations} from "vuex";
|
||||
import AppSelector from "@/components/AppSelector";
|
||||
import MainAppBar from "@/components/MainAppBar";
|
||||
|
||||
export default {
|
||||
name: "workspaces.vue",
|
||||
components: {
|
||||
MainAppBar,
|
||||
AppSelector,
|
||||
WorkspaceSelector
|
||||
},
|
||||
data(context) {
|
||||
let data = {};
|
||||
return data;
|
||||
},
|
||||
computed: {
|
||||
workspace: {
|
||||
get() {
|
||||
return this.$store.getters["workspaces/getWorkspace"]
|
||||
},
|
||||
set(val) {
|
||||
this.$store.dispatch("workspaces/setWorkspace", val)
|
||||
}
|
||||
},
|
||||
workspaces: {
|
||||
get() {
|
||||
return this.$store.getters["workspaces/getWorkspaces"]
|
||||
},
|
||||
set(val) {
|
||||
this.$store.dispatch("workspaces/setWorkspaces", val)
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
abbrev(name) {
|
||||
return name;
|
||||
},
|
||||
purgeWorkspace: function (ws) {
|
||||
console.log("purging " + ws);
|
||||
this.$store.dispatch('workspaces/purgeWorkspace', ws);
|
||||
// this.$store.dispatch("workspaces/setWorkspace")
|
||||
this.$forceUpdate();
|
||||
},
|
||||
},
|
||||
created() {
|
||||
console.log("created component...");
|
||||
this.$store.dispatch('workspaces/initWorkspaces', "workspace panel load");
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
86
docsys/src/main/node/docsys/pages/ui/workspaces/detail.vue
Normal file
86
docsys/src/main/node/docsys/pages/ui/workspaces/detail.vue
Normal file
@@ -0,0 +1,86 @@
|
||||
<template>
|
||||
<v-app>
|
||||
<main-app-bar></main-app-bar>
|
||||
|
||||
<!-- <workspace-selector @changed="seenChange(workspace)"></workspace-selector>-->
|
||||
|
||||
<!-- <v-btn title="start a new workspace" @click="startNewWorkspace()">-->
|
||||
<!-- <v-icon>mdi-folder-plus-outline</v-icon>-->
|
||||
<!-- </v-btn>-->
|
||||
|
||||
<!-- <v-btn icon title="upload a workspace zip file">-->
|
||||
<!-- <v-icon>mdi-folder-upload</v-icon>-->
|
||||
<!-- </v-btn>-->
|
||||
<!-- <v-btn icon title="download workspaces.zip">-->
|
||||
<!-- <v-icon>mdi-briefcase-download</v-icon>-->
|
||||
<!-- </v-btn>-->
|
||||
<!-- <v-btn icon title="upload workspaces.zip">-->
|
||||
<!-- <v-icon>mdi-briefcase-upload</v-icon>-->
|
||||
<!-- </v-btn>-->
|
||||
|
||||
<v-content justify-start align-start class="d-inline-block pa-4 ma-10">
|
||||
<div class="row no-gutters">
|
||||
|
||||
</div>
|
||||
</v-content>
|
||||
|
||||
</v-app>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import WorkspaceSelector from "~/components/WorkspaceSelector";
|
||||
import {mapActions, mapGetters, mapMutations} from "vuex";
|
||||
import AppSelector from "@/components/AppSelector";
|
||||
import MainAppBar from "@/components/MainAppBar";
|
||||
|
||||
export default {
|
||||
name: "workspaces.vue",
|
||||
components: {
|
||||
MainAppBar,
|
||||
AppSelector,
|
||||
WorkspaceSelector
|
||||
},
|
||||
data(context) {
|
||||
let data = {};
|
||||
return data;
|
||||
},
|
||||
computed: {
|
||||
workspace: {
|
||||
get() {
|
||||
return this.$store.getters["workspaces/getWorkspace"]
|
||||
},
|
||||
set(val) {
|
||||
this.$store.dispatch("workspaces/setWorkspace", val)
|
||||
}
|
||||
},
|
||||
workspaces: {
|
||||
get() {
|
||||
return this.$store.getters["workspaces/getWorkspaces"]
|
||||
},
|
||||
set(val) {
|
||||
this.$store.dispatch("workspaces/setWorkspaces", val)
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
abbrev(name) {
|
||||
return name;
|
||||
},
|
||||
purgeWorkspace: function (ws) {
|
||||
console.log("purging " + ws);
|
||||
this.$store.dispatch('workspaces/purgeWorkspace', ws);
|
||||
// this.$store.dispatch("workspaces/setWorkspace")
|
||||
this.$forceUpdate();
|
||||
},
|
||||
},
|
||||
created() {
|
||||
console.log("created component...");
|
||||
this.$store.dispatch('workspaces/initWorkspaces', "workspace panel load");
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
@@ -1,31 +1,254 @@
|
||||
import endpoints from "@/js/endpoints";
|
||||
|
||||
// https://www.mikestreety.co.uk/blog/vue-js-using-localstorage-with-the-vuex-store
|
||||
|
||||
|
||||
/**
|
||||
categories: [
|
||||
{
|
||||
name,
|
||||
title,
|
||||
topics,
|
||||
weight,
|
||||
path
|
||||
summary_topic: {
|
||||
name,
|
||||
path,
|
||||
basename,
|
||||
categories,
|
||||
weight,
|
||||
title,
|
||||
content: mdMeta.body
|
||||
},
|
||||
topics: [
|
||||
{
|
||||
name,
|
||||
path,
|
||||
basename,
|
||||
categories,
|
||||
weight,
|
||||
title,
|
||||
content: mdMeta.body
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
* @returns {{isDrawerOpen: boolean, isMenuLocked: boolean, active_category: null, active_topic: null, categories: []}}
|
||||
*/
|
||||
export const state = () => ({
|
||||
categories: [],
|
||||
active_category: null,
|
||||
active_topic: null,
|
||||
isDrawerOpen: true,
|
||||
isDrawerPinned: false
|
||||
isMenuLocked: false
|
||||
});
|
||||
|
||||
export const mutations = {
|
||||
// initializeStore(state) {
|
||||
// if(localStorage.getItem('store')) {
|
||||
// this.replaceState(
|
||||
// Object.assign(state,JSON.parse(localStorage.getItem('store')))
|
||||
// );
|
||||
// }
|
||||
// },
|
||||
toggleDrawerState(state, newDrawerState) {
|
||||
if (state.isDrawerPinned) {
|
||||
return;
|
||||
}
|
||||
state.isDrawerOpen=!state.isDrawerOpen;
|
||||
export const getters = {
|
||||
getCategories: (state, getters) => {
|
||||
return state.categories;
|
||||
},
|
||||
setDrawer(state, newDrawerState) {
|
||||
if (state.isDrawerPinned) {
|
||||
return;
|
||||
}
|
||||
state.isDrawerOpen=newDrawerState;
|
||||
getActiveCategory: (state, getters) => {
|
||||
return state.active_category;
|
||||
},
|
||||
setMenuLock(state, newLockState) {
|
||||
state.isDrawerPinned=newLockState;
|
||||
getActiveTopic: (state, getters) => {
|
||||
return state.active_topic;
|
||||
},
|
||||
getIsMenuLocked: (state, getters) => {
|
||||
return state.isMenuLocked;
|
||||
},
|
||||
getIsDrawerOpen: (state, getters) => {
|
||||
return state.isDrawerOpen;
|
||||
},
|
||||
getActiveMarkdownContent: (state, getters) => {
|
||||
if (state.active_category===null) {
|
||||
throw "unable to load active markdown for undefined category";
|
||||
}
|
||||
if (state.active_topic===null) {
|
||||
throw "unable to load active markdown for undefined topic";
|
||||
}
|
||||
return state.active_topic.content;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export const mutations = {
|
||||
setActiveCategory(state, active_category) {
|
||||
state.active_category = active_category;
|
||||
},
|
||||
setActiveTopic(state, active_topic) {
|
||||
state.active_topic = active_topic;
|
||||
},
|
||||
setCategories(state, categories) {
|
||||
state.categories = categories;
|
||||
},
|
||||
toggleDrawerState(state, newDrawerState) {
|
||||
if (state.isMenuLocked) {
|
||||
return;
|
||||
}
|
||||
state.isDrawerOpen = !state.isDrawerOpen;
|
||||
},
|
||||
setIsDrawerOpen(state, newDrawerState) {
|
||||
if (state.isMenuLocked) {
|
||||
return;
|
||||
}
|
||||
state.isDrawerOpen = newDrawerState;
|
||||
},
|
||||
setIsMenuLocked(state, newLockState) {
|
||||
state.isMenuLocked = newLockState;
|
||||
}
|
||||
};
|
||||
|
||||
export const actions = {
|
||||
async setActiveCategory({commit, state, dispatch}, active_category) {
|
||||
await commit("setActiveCategory", active_category)
|
||||
},
|
||||
async setActiveTopic({commit, state, dispatch}, active_topic) {
|
||||
await commit("setActiveTopic", active_topic);
|
||||
},
|
||||
async setIsMenuLocked({commit, state, dispatch}, isMenuLocked) {
|
||||
await commit("setIsMenuLocked", isMenuLocked);
|
||||
},
|
||||
async setIsDrawerOpen({commit, state, dispatch}, isDrawerOpen) {
|
||||
await commit("setIsDrawerOpen", isDrawerOpen)
|
||||
},
|
||||
async setCategories({commit, state, dispatch, context}, categories) {
|
||||
await commit("setCategories", categories)
|
||||
},
|
||||
async loadCategories(context) {
|
||||
// let location = document.location;
|
||||
// console.log("location:" + location);
|
||||
|
||||
let commit = context.commit;
|
||||
let state = context.state;
|
||||
let dispatch = context.dispatch;
|
||||
if (state.categories === null || state.categories.length === 0) {
|
||||
|
||||
let fm = require('front-matter');
|
||||
|
||||
const category_data = await this.$axios.get(endpoints.url(document, context, "/services/docs/markdown.csv"))
|
||||
.then(manifest => {
|
||||
// console.log("typeof(manifest):" + typeof (manifest))
|
||||
// console.log("manifest:" + JSON.stringify(manifest, null, 2))
|
||||
return manifest.data.split("\n").filter(x => {
|
||||
return x !== null && x.length > 0
|
||||
})
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log("error getting data:" + e);
|
||||
throw e;
|
||||
})
|
||||
.then(async lines => {
|
||||
let val = await Promise.all(lines.map(line => {
|
||||
let url = "/docs" + "/" + line;
|
||||
// console.log("url:"+url)
|
||||
return this.$axios.get(endpoints.url(document, context, "/services/docs/" + line))
|
||||
.then(res => {
|
||||
// console.log("typeof(res):" + typeof(res))
|
||||
return {
|
||||
path: line,
|
||||
content: res.data
|
||||
};
|
||||
})
|
||||
})).then(r => {
|
||||
// console.log("r:" + JSON.stringify(r,null,2))
|
||||
return r
|
||||
});
|
||||
return val;
|
||||
// let mapof =Object.fromEntries(val)
|
||||
// console.log("mapof:" + JSON.stringify(mapof, null, 2))
|
||||
// return mapof;
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log("error getting entries:" + e);
|
||||
throw e;
|
||||
})
|
||||
.then(fetched => {
|
||||
return fetched.map(entry => {
|
||||
|
||||
// console.log("entry:" + JSON.stringify(entry,null,2))
|
||||
let [, name] = entry.path.match(/(.+)\.md$/);
|
||||
let basename = entry.path.split("/").find(x => x.includes(".md"))
|
||||
let categories = entry.path.split("/").filter(x => !x.includes("."))
|
||||
|
||||
let mdMeta = fm(entry.content);
|
||||
|
||||
let weight = ((mdMeta.attributes.weight) ? mdMeta.attributes.weight : 0)
|
||||
let title = ((mdMeta.attributes.title) ? mdMeta.attributes.title : basename)
|
||||
let path = "/docs/" + entry.path
|
||||
let baseurl = endpoints.url(document, context, "/services/docs/" + path);
|
||||
console.log("baseurl for doc:" + baseurl);
|
||||
let body = endpoints.localize(mdMeta.body, baseurl)
|
||||
// console.log("path:" + entry.path)
|
||||
return {
|
||||
name,
|
||||
path,
|
||||
basename,
|
||||
categories,
|
||||
weight,
|
||||
title,
|
||||
content: mdMeta.body
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
.catch((e) => {
|
||||
console.log("error parsing entries:" + e);
|
||||
throw e;
|
||||
})
|
||||
.then(alltopics => {
|
||||
// console.log("input:" + JSON.stringify(input, null, 2))
|
||||
let categorySet = new Set();
|
||||
alltopics.forEach(x => {
|
||||
x.categories.forEach(y => {
|
||||
categorySet.add(y);
|
||||
})
|
||||
})
|
||||
return Array.from(categorySet).map(name => {
|
||||
// console.log("category:" + JSON.stringify(category, null, 2))
|
||||
|
||||
let topics = alltopics.filter(x => x.categories.toString() === name);
|
||||
// console.log("docs_in_category = " + JSON.stringify(docs_in_category, null, 2))
|
||||
|
||||
let summary_topic = topics.find(x => x.path.endsWith('index.md'));
|
||||
let weight = summary_topic ? summary_topic.weight : 0;
|
||||
let title = summary_topic ? (summary_topic.title ? summary_topic.title : name) : name;
|
||||
let content = summary_topic ? (summary_topic.content ? summary_topic.content: "") : "";
|
||||
|
||||
topics = topics.filter(x => !x.path.endsWith('index.md'));
|
||||
topics.sort((a, b) => a.weight - b.weight);
|
||||
|
||||
let path = "/docs/" + name;
|
||||
let entry = {
|
||||
path,
|
||||
name,
|
||||
title,
|
||||
weight,
|
||||
content,
|
||||
topics,
|
||||
summary_topic
|
||||
}
|
||||
// console.log("entry=> " + entry);
|
||||
return entry;
|
||||
}).sort((c1, c2) => c1.weight - c2.weight);
|
||||
})
|
||||
|
||||
.catch((e) => {
|
||||
console.error("error in loadCategories:" + e);
|
||||
})
|
||||
|
||||
await dispatch("setCategories", category_data)
|
||||
}
|
||||
|
||||
if (state.active_category===null) {
|
||||
commit("setActiveCategory", state.categories[0]);
|
||||
}
|
||||
|
||||
if (state.active_topic===null) {
|
||||
commit("setActiveTopic", state.active_category.topics[0]);
|
||||
}
|
||||
|
||||
// console.log("typeof(result):" + typeof (docinfo))
|
||||
// console.log("result:" + JSON.stringify(docinfo, null, 2))
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
export const state = () => ({
|
||||
|
||||
})
|
||||
|
||||
export const getters = {}
|
||||
61
docsys/src/main/node/docsys/store/scenarios.js
Normal file
61
docsys/src/main/node/docsys/store/scenarios.js
Normal file
@@ -0,0 +1,61 @@
|
||||
// https://www.mikestreety.co.uk/blog/vue-js-using-localstorage-with-the-vuex-store
|
||||
import {mapGetters} from "vuex";
|
||||
import endpoints from "@/js/endpoints";
|
||||
|
||||
export const state = () => ({
|
||||
scenarios: []
|
||||
});
|
||||
|
||||
export const getters = {
|
||||
getScenarios: (state, getters) => {
|
||||
return state.scenarios;
|
||||
}
|
||||
}
|
||||
|
||||
export const mutations = {
|
||||
setScenarios(state, scenarios) {
|
||||
state.scenarios = scenarios;
|
||||
}
|
||||
}
|
||||
|
||||
export const actions = {
|
||||
async loadScenarios(context, reason) {
|
||||
console.log("loading scenarios because '" + reason + "'")
|
||||
await this.$axios.$get(endpoints.url(document, context, "/services/executor/scenarios/"))
|
||||
.then(res => {
|
||||
// console.log("axios/vuex scenarios async get:" + JSON.stringify(res));
|
||||
// console.log("committing setScenarios:" + JSON.stringify(res));
|
||||
context.commit('setScenarios', res)
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("axios/nuxt scenarios async error:", e);
|
||||
})
|
||||
},
|
||||
async runScenario(context, scenario_config) {
|
||||
await this.$axios.post(endpoints.url(document, context, "/services/executor/cli"), scenario_config)
|
||||
.then(res => {
|
||||
console.log("execute scenarios response:" + res)
|
||||
}
|
||||
)
|
||||
.catch((e) => {
|
||||
console.error("axios/nuxt cli error: " + e)
|
||||
})
|
||||
|
||||
},
|
||||
async stopScenario(context, scenario_name) {
|
||||
await this.$axios.$post(endpoints.url(document, context, "/services/executor/stop/" + scenario_name))
|
||||
.then()
|
||||
.catch((e) => {
|
||||
console.error("axios/nuxt scenario stop error:", e);
|
||||
})
|
||||
await context.dispatch("loadScenarios")
|
||||
},
|
||||
async deleteScenario(context, scenario_name) {
|
||||
await this.$axios.$delete(endpoints.url(document, context, "/services/executor/scenario/" + scenario_name))
|
||||
.then()
|
||||
.catch((e) => {
|
||||
console.error("axios/nuxt scenario stop error:", e);
|
||||
})
|
||||
await context.dispatch("loadScenarios")
|
||||
}
|
||||
};
|
||||
33
docsys/src/main/node/docsys/store/service_status.js
Normal file
33
docsys/src/main/node/docsys/store/service_status.js
Normal file
@@ -0,0 +1,33 @@
|
||||
// https://www.mikestreety.co.uk/blog/vue-js-using-localstorage-with-the-vuex-store
|
||||
import {mapGetters} from "vuex";
|
||||
import endpoints from "@/js/endpoints";
|
||||
|
||||
export const state = () => ({
|
||||
endpoints: {},
|
||||
enabled: false
|
||||
});
|
||||
|
||||
export const getters = {
|
||||
getEndpoints: (state, getters) => {
|
||||
return state.endpoints;
|
||||
}
|
||||
}
|
||||
|
||||
export const mutations = {
|
||||
setEndpoints(state, endpoints) {
|
||||
state.endpoints = endpoints;
|
||||
}
|
||||
}
|
||||
|
||||
export const actions = {
|
||||
async loadEndpoints(context, reason) {
|
||||
console.log("loading endpoint status because '" + reason + "'")
|
||||
await this.$axios.get(endpoints.url(document, context, "/services/status"))
|
||||
.then(res => {
|
||||
context.commit('setEndpoints', res)
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("axios/nuxt status async error:" + e);
|
||||
})
|
||||
}
|
||||
};
|
||||
88
docsys/src/main/node/docsys/store/workloads.js
Normal file
88
docsys/src/main/node/docsys/store/workloads.js
Normal file
@@ -0,0 +1,88 @@
|
||||
// https://www.mikestreety.co.uk/blog/vue-js-using-localstorage-with-the-vuex-store
|
||||
import {mapGetters} from "vuex";
|
||||
import endpoints from "@/js/endpoints";
|
||||
|
||||
export const state = () => ({
|
||||
workloads: [],
|
||||
templates: {},
|
||||
searchin: ''
|
||||
});
|
||||
|
||||
export const getters = {
|
||||
getWorkloads: (state, getters) => {
|
||||
return state.workloads;
|
||||
},
|
||||
getSearchin: (state, getters) => {
|
||||
return state.searchin;
|
||||
},
|
||||
getTemplates: (state, getters) => {
|
||||
return state.templates;
|
||||
}
|
||||
}
|
||||
|
||||
export const mutations = {
|
||||
setWorkloads(state, workloads) {
|
||||
state.workloads = workloads;
|
||||
},
|
||||
setSearchin(state, searchin) {
|
||||
state.searchin = searchin;
|
||||
},
|
||||
setTemplates(state, templates) {
|
||||
state.templates = templates;
|
||||
}
|
||||
};
|
||||
|
||||
export const actions = {
|
||||
async setWorkloads(context, val) {
|
||||
// console.log("committing setWorkloads:" + JSON.stringify(val));
|
||||
context.commit('setWorkloads', val);
|
||||
},
|
||||
async setTemplates(context, val) {
|
||||
// console.log("commiting setTemplates:" + JSON.stringify(val));
|
||||
context.commit("setTemplates", val);
|
||||
},
|
||||
async setSearchin(context, val) {
|
||||
// console.log("committing setsearchin:" + JSON.stringify(val));
|
||||
context.commit('setSearchin', val);
|
||||
},
|
||||
async fetchWorkloads(context, params) {
|
||||
let reason = params.reason;
|
||||
let searchin = params.searchin;
|
||||
if (reason === undefined || searchin === undefined) {
|
||||
throw "Unable to fetch workloads without a reason or searchin: " + JSON.stringify(params);
|
||||
}
|
||||
// console.log("fetching workloads because '" + reason + "'")
|
||||
|
||||
context.commit("setTemplates", undefined);
|
||||
this.$axios.$get(endpoints.url(document, context, "/services/workloads/?searchin=" + searchin))
|
||||
.then(res => {
|
||||
// console.log("axios/vuex workloads async get:" + JSON.stringify(res));
|
||||
context.commit("setWorkloads", res);
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("axios/nuxt workloads async error:", e);
|
||||
})
|
||||
},
|
||||
async fetchTemplates(context, params) {
|
||||
let reason = params.reason;
|
||||
let workload = params.workload;
|
||||
let searchin = params.searchin;
|
||||
if (reason === undefined || workload === undefined || searchin === undefined) {
|
||||
throw "Unable to fetch templates for workload without a {reason,workload,searchin}: " + JSON.stringify(params);
|
||||
}
|
||||
console.log("fetching templates for '" + workload + "' because '" + reason + "'")
|
||||
|
||||
this.$axios.$get(endpoints.url(document, context, "/services/workloads/parameters?workloadName=" + workload + "&" + "searchin=" + searchin))
|
||||
.then(res => {
|
||||
// console.log("axios/vuex templates async get:" + JSON.stringify(res));
|
||||
context.dispatch("setTemplates", res)
|
||||
.then(r => {
|
||||
console.log("setTemplates result:" + JSON.stringify(r, null, 2))
|
||||
});
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("axios/nuxt templates async error:", e);
|
||||
})
|
||||
|
||||
}
|
||||
};
|
||||
106
docsys/src/main/node/docsys/store/workspaces.js
Normal file
106
docsys/src/main/node/docsys/store/workspaces.js
Normal file
@@ -0,0 +1,106 @@
|
||||
// https://www.mikestreety.co.uk/blog/vue-js-using-localstorage-with-the-vuex-store
|
||||
import {mapGetters} from "vuex";
|
||||
import endpoints from "@/js/endpoints";
|
||||
|
||||
export const state = () => ({
|
||||
workspace: 'default',
|
||||
workspaces: [],
|
||||
fileview: []
|
||||
});
|
||||
|
||||
export const getters = {
|
||||
getWorkspace: (state, getters) => {
|
||||
return state.workspace;
|
||||
},
|
||||
getWorkspaces: (state, getters) => {
|
||||
return state.workspaces;
|
||||
},
|
||||
getFileview: (state, getters) => {
|
||||
return state.fileview;
|
||||
}
|
||||
|
||||
// ...mapGetters(['workspace','workspaces'])
|
||||
}
|
||||
|
||||
export const mutations = {
|
||||
setWorkspace(state, workspace) {
|
||||
state.workspace = workspace;
|
||||
},
|
||||
setWorkspaces(state, workspaces) {
|
||||
state.workspaces = workspaces;
|
||||
},
|
||||
setFileview(state, fileview) {
|
||||
state.fileview = fileview;
|
||||
}
|
||||
};
|
||||
|
||||
export const actions = {
|
||||
async setWorkspace(context, val) {
|
||||
// console.log("committing setWorkspace:" + JSON.stringify(val));
|
||||
context.commit('setWorkspace', val);
|
||||
},
|
||||
async setWorkspaces(context, val) {
|
||||
// console.log("committing setWorkspaces:" + JSON.stringify(val));
|
||||
context.commit('setWorkspaces', val);
|
||||
},
|
||||
async initWorkspaces(context, reason) {
|
||||
// console.log("initializing workspaces because '" + reason + "'")
|
||||
this.$axios.$get(endpoints.url(document, context, "/services/workspaces/"))
|
||||
.then(res => {
|
||||
// console.log("axios/vuex workspaces async get:" + JSON.stringify(res));
|
||||
// console.log("committing setWorkspaces:" + JSON.stringify(res));
|
||||
context.commit('setWorkspaces', res)
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("axios/nuxt workspaces async error:", e);
|
||||
})
|
||||
},
|
||||
async putFile(context, params) {
|
||||
let to_workspace = params.workspace;
|
||||
let to_filename = params.filename;
|
||||
let to_content = params.content;
|
||||
if (!to_workspace || !to_filename || !to_content) {
|
||||
throw("Unable to save file to workspace without params having workspace, filename, content");
|
||||
}
|
||||
const result = await this.$axios.$post(endpoints.url(document, context, "/services/workspaces/" + to_workspace + "/" + to_filename, to_content))
|
||||
.then(res => {
|
||||
console.log("axios/vuex workspace put:" + JSON.stringify(res));
|
||||
return res;
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("axios/vuex workspace put:", e)
|
||||
});
|
||||
},
|
||||
async activateWorkspace(context, workspace) {
|
||||
const fresh_workspace = await this.$axios.$get(endpoints.url(document, context, "/services/workspaces/" + workspace))
|
||||
.then(res => {
|
||||
// console.log("axios/vuex workspace async get:" + JSON.stringify(res))
|
||||
return res;
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("axios/nuxt getWorkspace async error:", e)
|
||||
})
|
||||
await context.dispatch('initWorkspaces', "workspace '" + workspace + "' added");
|
||||
// await dispatch.initWorkspaces({commit, state, dispatch}, "workspace '" + workspace + "' added")
|
||||
// await this.$store.dispatch("workspaces/initWorkspaces", "workspace '" + workspace + "' added")
|
||||
// await this.initWorkspaces({commit}, "workspace added");
|
||||
context.commit('setWorkspace', fresh_workspace.name)
|
||||
return workspace;
|
||||
},
|
||||
async purgeWorkspace(context, workspace) {
|
||||
await this.$axios.$delete(endpoints.url(document, context, "/services/workspaces/" + workspace))
|
||||
.then(res => {
|
||||
console.log("purged workspace:" + res)
|
||||
return res;
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("axios/nuxt purgeWorkspace error:", e)
|
||||
})
|
||||
const found = this.state.workspaces.workspaces.find(w => w.name === workspace);
|
||||
if (!found) {
|
||||
console.log("setting active workspace to 'default' since the previous workspace '" + workspace + "' is not found")
|
||||
await context.dispatch('activateWorkspace', "default");
|
||||
}
|
||||
await context.dispatch('initWorkspaces', "workspace '" + workspace + "' purged");
|
||||
}
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,135 @@
|
||||
<!doctype html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>NoSQLBench</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="Docs App for NoSQLBench"><link data-n-head="1" rel="icon" type="image/x-icon" href="/favicon.ico"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="preload" href="/_nuxt/7c52b47a9d09e9501071.js" as="script"><link rel="preload" href="/_nuxt/2db30ff69d2689005afd.js" as="script"><link rel="preload" href="/_nuxt/c01ee420d65f0f86e261.js" as="script"><link rel="preload" href="/_nuxt/fa799dd3c7503934188d.js" as="script">
|
||||
<title>NoSQLBench</title>
|
||||
<meta data-n-head="1" charset="utf-8">
|
||||
<meta data-n-head="1" name="viewport"
|
||||
content="width=device-width,initial-scale=1">
|
||||
<meta data-n-head="1" data-hid="description" name="description"
|
||||
content="Docs App for NoSQLBench">
|
||||
<link data-n-head="1" rel="icon" type="image/x-icon"
|
||||
href="/favicon.ico">
|
||||
<link data-n-head="1" rel="stylesheet" type="text/css"
|
||||
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap">
|
||||
<link data-n-head="1" rel="stylesheet" type="text/css"
|
||||
href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css">
|
||||
<link rel="preload" href="/_nuxt/runtime.c50e81a.js" as="script">
|
||||
<link rel="preload" href="/_nuxt/vendors/commons.0d00bcd.js"
|
||||
as="script">
|
||||
<link rel="preload" href="/_nuxt/app.4c18aa8.js" as="script">
|
||||
</head>
|
||||
<body>
|
||||
<div id="__nuxt"><style>#nuxt-loading{visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #fff;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div>
|
||||
<script type="text/javascript" src="/_nuxt/7c52b47a9d09e9501071.js"></script><script type="text/javascript" src="/_nuxt/2db30ff69d2689005afd.js"></script><script type="text/javascript" src="/_nuxt/c01ee420d65f0f86e261.js"></script><script type="text/javascript" src="/_nuxt/fa799dd3c7503934188d.js"></script></body>
|
||||
<div id="__nuxt">
|
||||
<style>#nuxt-loading {
|
||||
background: white;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
animation: nuxtLoadingIn 10s ease;
|
||||
-webkit-animation: nuxtLoadingIn 10s ease;
|
||||
animation-fill-mode: forwards;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@keyframes nuxtLoadingIn {
|
||||
0% {
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
}
|
||||
20% {
|
||||
visibility: visible;
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes nuxtLoadingIn {
|
||||
0% {
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
}
|
||||
20% {
|
||||
visibility: visible;
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
#nuxt-loading > div, #nuxt-loading > div:after {
|
||||
border-radius: 50%;
|
||||
width: 5rem;
|
||||
height: 5rem;
|
||||
}
|
||||
|
||||
#nuxt-loading > div {
|
||||
font-size: 10px;
|
||||
position: relative;
|
||||
text-indent: -9999em;
|
||||
border: .5rem solid #F5F5F5;
|
||||
border-left: .5rem solid #fff;
|
||||
-webkit-transform: translateZ(0);
|
||||
-ms-transform: translateZ(0);
|
||||
transform: translateZ(0);
|
||||
-webkit-animation: nuxtLoading 1.1s infinite linear;
|
||||
animation: nuxtLoading 1.1s infinite linear;
|
||||
}
|
||||
|
||||
#nuxt-loading.error > div {
|
||||
border-left: .5rem solid #ff4500;
|
||||
animation-duration: 5s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes nuxtLoading {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes nuxtLoading {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}</style>
|
||||
<script>window.addEventListener('error', function () {
|
||||
var e = document.getElementById('nuxt-loading');
|
||||
if (e) {
|
||||
e.className += ' error';
|
||||
}
|
||||
});</script>
|
||||
<div id="nuxt-loading" aria-live="polite" role="status">
|
||||
<div>Loading...</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>window.__NUXT__ = {
|
||||
config: {},
|
||||
staticAssetsBase: void 0
|
||||
}</script>
|
||||
<script src="/_nuxt/runtime.c50e81a.js"></script>
|
||||
<script src="/_nuxt/vendors/commons.0d00bcd.js"></script>
|
||||
<script src="/_nuxt/app.4c18aa8.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
!function(e){function r(data){for(var r,n,c=data[0],l=data[1],d=data[2],i=0,h=[];i<c.length;i++)n=c[i],Object.prototype.hasOwnProperty.call(o,n)&&o[n]&&h.push(o[n][0]),o[n]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(e[r]=l[r]);for(v&&v(data);h.length;)h.shift()();return f.push.apply(f,d||[]),t()}function t(){for(var e,i=0;i<f.length;i++){for(var r=f[i],t=!0,n=1;n<r.length;n++){var l=r[n];0!==o[l]&&(t=!1)}t&&(f.splice(i--,1),e=c(c.s=r[0]))}return e}var n={},o={11:0},f=[];function c(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,c),t.l=!0,t.exports}c.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var f,script=document.createElement("script");script.charset="utf-8",script.timeout=120,c.nc&&script.setAttribute("nonce",c.nc),script.src=function(e){return c.p+""+{0:"52a7cce22511daf04466",1:"407f8405125899b013f8",2:"74955e3a4ded093cd4a2",3:"a243bd228956b1ed8d5f",6:"8702cf295bbfbfa997dc",7:"c8bbbc322f8f1fe65a27",8:"5dbfbf0f0448fbb70c73",9:"3484794277c7edf13895",10:"51b41e8ba4499fa7c407",13:"e7c9fbb1e91c35f241b3"}[e]+".js"}(e);var l=new Error;f=function(r){script.onerror=script.onload=null,clearTimeout(d);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),f=r&&r.target&&r.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+f+")",l.name="ChunkLoadError",l.type=n,l.request=f,t[1](l)}o[e]=void 0}};var d=setTimeout((function(){f({type:"timeout",target:script})}),12e4);script.onerror=script.onload=f,document.head.appendChild(script)}return Promise.all(r)},c.m=e,c.c=n,c.d=function(e,r,t){c.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},c.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.t=function(e,r){if(1&r&&(e=c(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(c.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)c.d(t,n,function(r){return e[r]}.bind(null,n));return t},c.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(r,"a",r),r},c.o=function(object,e){return Object.prototype.hasOwnProperty.call(object,e)},c.p="/_nuxt/",c.oe=function(e){throw console.error(e),e};var l=window.webpackJsonp=window.webpackJsonp||[],d=l.push.bind(l);l.push=r,l=l.slice();for(var i=0;i<l.length;i++)r(l[i]);var v=d;t()}([]);
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
715
docsys/src/main/resources/docsys-guidebook/_nuxt/app.4c18aa8.js
Normal file
715
docsys/src/main/resources/docsys-guidebook/_nuxt/app.4c18aa8.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,223 @@
|
||||
/******/ (function(modules) { // webpackBootstrap
|
||||
/******/ // install a JSONP callback for chunk loading
|
||||
/******/ function webpackJsonpCallback(data) {
|
||||
/******/ var chunkIds = data[0];
|
||||
/******/ var moreModules = data[1];
|
||||
/******/ var executeModules = data[2];
|
||||
/******/
|
||||
/******/ // add "moreModules" to the modules object,
|
||||
/******/ // then flag all "chunkIds" as loaded and fire callback
|
||||
/******/ var moduleId, chunkId, i = 0, resolves = [];
|
||||
/******/ for(;i < chunkIds.length; i++) {
|
||||
/******/ chunkId = chunkIds[i];
|
||||
/******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {
|
||||
/******/ resolves.push(installedChunks[chunkId][0]);
|
||||
/******/ }
|
||||
/******/ installedChunks[chunkId] = 0;
|
||||
/******/ }
|
||||
/******/ for(moduleId in moreModules) {
|
||||
/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
|
||||
/******/ modules[moduleId] = moreModules[moduleId];
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ if(parentJsonpFunction) parentJsonpFunction(data);
|
||||
/******/
|
||||
/******/ while(resolves.length) {
|
||||
/******/ resolves.shift()();
|
||||
/******/ }
|
||||
/******/
|
||||
/******/ // add entry modules from loaded chunk to deferred list
|
||||
/******/ deferredModules.push.apply(deferredModules, executeModules || []);
|
||||
/******/
|
||||
/******/ // run deferred modules when all chunks ready
|
||||
/******/ return checkDeferredModules();
|
||||
/******/ };
|
||||
/******/ function checkDeferredModules() {
|
||||
/******/ var result;
|
||||
/******/ for(var i = 0; i < deferredModules.length; i++) {
|
||||
/******/ var deferredModule = deferredModules[i];
|
||||
/******/ var fulfilled = true;
|
||||
/******/ for(var j = 1; j < deferredModule.length; j++) {
|
||||
/******/ var depId = deferredModule[j];
|
||||
/******/ if(installedChunks[depId] !== 0) fulfilled = false;
|
||||
/******/ }
|
||||
/******/ if(fulfilled) {
|
||||
/******/ deferredModules.splice(i--, 1);
|
||||
/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/
|
||||
/******/ return result;
|
||||
/******/ }
|
||||
/******/
|
||||
/******/ // The module cache
|
||||
/******/ var installedModules = {};
|
||||
/******/
|
||||
/******/ // object to store loaded and loading chunks
|
||||
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
|
||||
/******/ // Promise = chunk loading, 0 = chunk loaded
|
||||
/******/ var installedChunks = {
|
||||
/******/ 15: 0
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ var deferredModules = [];
|
||||
/******/
|
||||
/******/ // script path function
|
||||
/******/ function jsonpScriptSrc(chunkId) {
|
||||
/******/ return __webpack_require__.p + "" + ({"1":"vendors/43be604e","2":"vendors/0a795986","3":"vendors/fd2b0c0a","4":"vendors/docs.~docs.namespaces","6":"pages/docs/_","7":"pages/docs/namespaces","8":"pages/index","9":"pages/ui/build","10":"pages/ui/index","11":"pages/ui/run","12":"pages/ui/watch","13":"pages/ui/workspaces","14":"pages/ui/workspaces/detail"}[chunkId]||chunkId) + "." + {"1":"dacc3a2","2":"25c25ea","3":"cfd2855","4":"7b43cc5","6":"9ab2bd1","7":"d0e76a7","8":"5b0ce0c","9":"2680cd1","10":"55cd7c1","11":"39e2475","12":"fc9c1ed","13":"00fe5ed","14":"1d1d668"}[chunkId] + ".js"
|
||||
/******/ }
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/
|
||||
/******/ // Check if module is in cache
|
||||
/******/ if(installedModules[moduleId]) {
|
||||
/******/ return installedModules[moduleId].exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = installedModules[moduleId] = {
|
||||
/******/ i: moduleId,
|
||||
/******/ l: false,
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Flag the module as loaded
|
||||
/******/ module.l = true;
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/******/ // This file contains only the entry chunk.
|
||||
/******/ // The chunk loading function for additional chunks
|
||||
/******/ __webpack_require__.e = function requireEnsure(chunkId) {
|
||||
/******/ var promises = [];
|
||||
/******/
|
||||
/******/
|
||||
/******/ // JSONP chunk loading for javascript
|
||||
/******/
|
||||
/******/ var installedChunkData = installedChunks[chunkId];
|
||||
/******/ if(installedChunkData !== 0) { // 0 means "already installed".
|
||||
/******/
|
||||
/******/ // a Promise means "currently loading".
|
||||
/******/ if(installedChunkData) {
|
||||
/******/ promises.push(installedChunkData[2]);
|
||||
/******/ } else {
|
||||
/******/ // setup Promise in chunk cache
|
||||
/******/ var promise = new Promise(function(resolve, reject) {
|
||||
/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject];
|
||||
/******/ });
|
||||
/******/ promises.push(installedChunkData[2] = promise);
|
||||
/******/
|
||||
/******/ // start chunk loading
|
||||
/******/ var script = document.createElement('script');
|
||||
/******/ var onScriptComplete;
|
||||
/******/
|
||||
/******/ script.charset = 'utf-8';
|
||||
/******/ script.timeout = 120;
|
||||
/******/ if (__webpack_require__.nc) {
|
||||
/******/ script.setAttribute("nonce", __webpack_require__.nc);
|
||||
/******/ }
|
||||
/******/ script.src = jsonpScriptSrc(chunkId);
|
||||
/******/
|
||||
/******/ // create error before stack unwound to get useful stacktrace later
|
||||
/******/ var error = new Error();
|
||||
/******/ onScriptComplete = function (event) {
|
||||
/******/ // avoid mem leaks in IE.
|
||||
/******/ script.onerror = script.onload = null;
|
||||
/******/ clearTimeout(timeout);
|
||||
/******/ var chunk = installedChunks[chunkId];
|
||||
/******/ if(chunk !== 0) {
|
||||
/******/ if(chunk) {
|
||||
/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
|
||||
/******/ var realSrc = event && event.target && event.target.src;
|
||||
/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
|
||||
/******/ error.name = 'ChunkLoadError';
|
||||
/******/ error.type = errorType;
|
||||
/******/ error.request = realSrc;
|
||||
/******/ chunk[1](error);
|
||||
/******/ }
|
||||
/******/ installedChunks[chunkId] = undefined;
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ var timeout = setTimeout(function(){
|
||||
/******/ onScriptComplete({ type: 'timeout', target: script });
|
||||
/******/ }, 120000);
|
||||
/******/ script.onerror = script.onload = onScriptComplete;
|
||||
/******/ document.head.appendChild(script);
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ return Promise.all(promises);
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // expose the modules object (__webpack_modules__)
|
||||
/******/ __webpack_require__.m = modules;
|
||||
/******/
|
||||
/******/ // expose the module cache
|
||||
/******/ __webpack_require__.c = installedModules;
|
||||
/******/
|
||||
/******/ // define getter function for harmony exports
|
||||
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||||
/******/ if(!__webpack_require__.o(exports, name)) {
|
||||
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = function(exports) {
|
||||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||
/******/ }
|
||||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // create a fake namespace object
|
||||
/******/ // mode & 1: value is a module id, require it
|
||||
/******/ // mode & 2: merge all properties of value into the ns
|
||||
/******/ // mode & 4: return value when already ns object
|
||||
/******/ // mode & 8|1: behave like require
|
||||
/******/ __webpack_require__.t = function(value, mode) {
|
||||
/******/ if(mode & 1) value = __webpack_require__(value);
|
||||
/******/ if(mode & 8) return value;
|
||||
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
||||
/******/ var ns = Object.create(null);
|
||||
/******/ __webpack_require__.r(ns);
|
||||
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
||||
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
||||
/******/ return ns;
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||
/******/ __webpack_require__.n = function(module) {
|
||||
/******/ var getter = module && module.__esModule ?
|
||||
/******/ function getDefault() { return module['default']; } :
|
||||
/******/ function getModuleExports() { return module; };
|
||||
/******/ __webpack_require__.d(getter, 'a', getter);
|
||||
/******/ return getter;
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Object.prototype.hasOwnProperty.call
|
||||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||||
/******/
|
||||
/******/ // __webpack_public_path__
|
||||
/******/ __webpack_require__.p = "/_nuxt/";
|
||||
/******/
|
||||
/******/ // on error function for async loading
|
||||
/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };
|
||||
/******/
|
||||
/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
|
||||
/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
|
||||
/******/ jsonpArray.push = webpackJsonpCallback;
|
||||
/******/ jsonpArray = jsonpArray.slice();
|
||||
/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
|
||||
/******/ var parentJsonpFunction = oldJsonpFunction;
|
||||
/******/
|
||||
/******/
|
||||
/******/ // run deferred modules from other chunks
|
||||
/******/ checkDeferredModules();
|
||||
/******/ })
|
||||
/************************************************************************/
|
||||
/******/ ([]);
|
||||
177
docsys/src/main/resources/docsys-guidebook/_nuxt/vendors/0a795986.25c25ea.js
vendored
Normal file
177
docsys/src/main/resources/docsys-guidebook/_nuxt/vendors/0a795986.25c25ea.js
vendored
Normal file
File diff suppressed because one or more lines are too long
425
docsys/src/main/resources/docsys-guidebook/_nuxt/vendors/43be604e.dacc3a2.js
vendored
Normal file
425
docsys/src/main/resources/docsys-guidebook/_nuxt/vendors/43be604e.dacc3a2.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1321
docsys/src/main/resources/docsys-guidebook/_nuxt/vendors/commons.0d00bcd.js
vendored
Normal file
1321
docsys/src/main/resources/docsys-guidebook/_nuxt/vendors/commons.0d00bcd.js
vendored
Normal file
File diff suppressed because one or more lines are too long
69
docsys/src/main/resources/docsys-guidebook/_nuxt/vendors/docs.~docs.namespaces.7b43cc5.js
vendored
Normal file
69
docsys/src/main/resources/docsys-guidebook/_nuxt/vendors/docs.~docs.namespaces.7b43cc5.js
vendored
Normal file
File diff suppressed because one or more lines are too long
237
docsys/src/main/resources/docsys-guidebook/_nuxt/vendors/fd2b0c0a.cfd2855.js
vendored
Normal file
237
docsys/src/main/resources/docsys-guidebook/_nuxt/vendors/fd2b0c0a.cfd2855.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -1,9 +1,135 @@
|
||||
<!doctype html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>NoSQLBench</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="Docs App for NoSQLBench"><link data-n-head="1" rel="icon" type="image/x-icon" href="/favicon.ico"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="preload" href="/_nuxt/7c52b47a9d09e9501071.js" as="script"><link rel="preload" href="/_nuxt/2db30ff69d2689005afd.js" as="script"><link rel="preload" href="/_nuxt/c01ee420d65f0f86e261.js" as="script"><link rel="preload" href="/_nuxt/fa799dd3c7503934188d.js" as="script">
|
||||
<title>NoSQLBench</title>
|
||||
<meta data-n-head="1" charset="utf-8">
|
||||
<meta data-n-head="1" name="viewport"
|
||||
content="width=device-width,initial-scale=1">
|
||||
<meta data-n-head="1" data-hid="description" name="description"
|
||||
content="Docs App for NoSQLBench">
|
||||
<link data-n-head="1" rel="icon" type="image/x-icon"
|
||||
href="/favicon.ico">
|
||||
<link data-n-head="1" rel="stylesheet" type="text/css"
|
||||
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap">
|
||||
<link data-n-head="1" rel="stylesheet" type="text/css"
|
||||
href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css">
|
||||
<link rel="preload" href="/_nuxt/runtime.c50e81a.js" as="script">
|
||||
<link rel="preload" href="/_nuxt/vendors/commons.0d00bcd.js"
|
||||
as="script">
|
||||
<link rel="preload" href="/_nuxt/app.4c18aa8.js" as="script">
|
||||
</head>
|
||||
<body>
|
||||
<div id="__nuxt"><style>#nuxt-loading{visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #fff;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div>
|
||||
<script type="text/javascript" src="/_nuxt/7c52b47a9d09e9501071.js"></script><script type="text/javascript" src="/_nuxt/2db30ff69d2689005afd.js"></script><script type="text/javascript" src="/_nuxt/c01ee420d65f0f86e261.js"></script><script type="text/javascript" src="/_nuxt/fa799dd3c7503934188d.js"></script></body>
|
||||
<div id="__nuxt">
|
||||
<style>#nuxt-loading {
|
||||
background: white;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
animation: nuxtLoadingIn 10s ease;
|
||||
-webkit-animation: nuxtLoadingIn 10s ease;
|
||||
animation-fill-mode: forwards;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@keyframes nuxtLoadingIn {
|
||||
0% {
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
}
|
||||
20% {
|
||||
visibility: visible;
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes nuxtLoadingIn {
|
||||
0% {
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
}
|
||||
20% {
|
||||
visibility: visible;
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
#nuxt-loading > div, #nuxt-loading > div:after {
|
||||
border-radius: 50%;
|
||||
width: 5rem;
|
||||
height: 5rem;
|
||||
}
|
||||
|
||||
#nuxt-loading > div {
|
||||
font-size: 10px;
|
||||
position: relative;
|
||||
text-indent: -9999em;
|
||||
border: .5rem solid #F5F5F5;
|
||||
border-left: .5rem solid #fff;
|
||||
-webkit-transform: translateZ(0);
|
||||
-ms-transform: translateZ(0);
|
||||
transform: translateZ(0);
|
||||
-webkit-animation: nuxtLoading 1.1s infinite linear;
|
||||
animation: nuxtLoading 1.1s infinite linear;
|
||||
}
|
||||
|
||||
#nuxt-loading.error > div {
|
||||
border-left: .5rem solid #ff4500;
|
||||
animation-duration: 5s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes nuxtLoading {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes nuxtLoading {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}</style>
|
||||
<script>window.addEventListener('error', function () {
|
||||
var e = document.getElementById('nuxt-loading');
|
||||
if (e) {
|
||||
e.className += ' error';
|
||||
}
|
||||
});</script>
|
||||
<div id="nuxt-loading" aria-live="polite" role="status">
|
||||
<div>Loading...</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>window.__NUXT__ = {
|
||||
config: {},
|
||||
staticAssetsBase: void 0
|
||||
}</script>
|
||||
<script src="/_nuxt/runtime.c50e81a.js"></script>
|
||||
<script src="/_nuxt/vendors/commons.0d00bcd.js"></script>
|
||||
<script src="/_nuxt/app.4c18aa8.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.nosqlbench.docsys.core;
|
||||
|
||||
import io.nosqlbench.docsys.endpoints.DocsysMarkdownEndpoint;
|
||||
import org.junit.Test;
|
||||
|
||||
public class DocsysMarkdownLoaderEndpointTest {
|
||||
|
||||
Reference in New Issue
Block a user