Cómo usar plsql-parser(ANTLR)
(1)
Me gustaría comprobar la sintaxis de consulta PL / SQL en las pruebas automatizadas, y parece que https://github.com/porcelli/plsql-parser podría ser útil para eso. Sin embargo, no estoy averiguando cómo instalarlo y usarlo.
Tenga en cuenta que esto es para un proyecto de Ruby, pero soy razonablemente competente en Java. Espero que haya alguna manera de ejecutar la verificación a través de la consola, pasar el SQL y recuperar cualquier información de error, incluida la línea / columna.
Gracias.
- Descargue la herramienta ANTLR ver 3.5.1
- Descargue los códigos fuente desde aquí (ya que esta versión fue portada a 3.5.1)
- Usa la herramienta para compilar las fuentes de poarsers / no-ast subdir
- 1ra compilación PLSQLLexer.g
- 2.º compila PLSQLParser.g del subdir no-ast
- el uso de este código de muestra como un ejemplo:
import org.antlr.runtime.ANTLRNoCaseFileStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException;
import br.com.porcelli.parser.plsql.PLSQLLexer;
import br.com.porcelli.parser.plsql.PLSQLParser;
public static void parse(String file) {
try {
PLSQLLexer lex = new PLSQLLexer(new ANTLRNoCaseFileStream(file));
CommonTokenStream tokens = new CommonTokenStream(lex);
PLSQLParser parser = new PLSQLParser(tokens);
/*start_rule_return AST =*/ parser.data_manipulation_language_statements();
System.err.println(file +": " + parser.getNumberOfSyntaxErrors());
if(parser.getNumberOfSyntaxErrors() != 0)
{
//System.exit(1);
}
} catch (RecognitionException e) {
System.err.println(e.toString());
} catch (IOException e) {
System.err.println(e.toString());
} catch (java.lang.OutOfMemoryError e) {
System.err.println(file + ":");
System.err.println(e.toString());
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
System.err.println(file + ":");
System.err.println(e.toString());
}
}