📄 dqlastutil.java
字号:
package cn.myapps.core.dynaform.document.dql;
import java.io.StringReader;
import antlr.collections.AST;
import cn.myapps.base.action.ParamsTable;
import cn.myapps.core.dynaform.document.ejb.Item;
public class DQLASTUtil {
/**
* @param args
*/
public static void main(String[] args) {
}
public static String inListToString(AST ast) {
StringBuffer text = new StringBuffer();
if (ast != null && ast.getNumberOfChildren() > 0) {
String t = ast.getText();
if (t != null && t.equals("inList")) {
AST tmp = ast.getFirstChild();
text.append("(");
while (tmp != null) {
text.append(tmp.getText());
tmp = tmp.getNextSibling();
if (tmp != null) {
text.append(",");
}
}
text.append(")");
}
}
return text.toString();
}
public static String transTo(String text, ParamsTable params, int side,
int ident, int opt) {
// System.out.println("ident->"+ident);
StringBuffer str = new StringBuffer();
if (text != null) {
if (ident == DqlTokenTypes.IDENT) {
if (text.toUpperCase().startsWith("$PARENT.")) {
String fieldName = text.substring(8);
if (fieldName.startsWith("$")) {
str.append(side == 1 ? "(" : "");
str.append("doc.parent.");
str.append(fieldName.substring(1, fieldName.length()));
str.append(side == 2 ? ")" : "");
}
else {
str.append(
"doc.parent in (select items.document from "
+ Item.class.getName()
+ " items where items.name='").append(fieldName)
.append("' AND ");
if (opt==DqlTokenTypes.ILIKE) {
str.append("lower(items.varcharvalue)");
}
else {
str.append("items.varcharvalue");
}
}
}
else if (text.toUpperCase().startsWith("$CHILDS")) {
String fieldName = text.substring(8);
if (fieldName.startsWith("$")) {
str.append(side == 1 ? "(" : "");
str.append("doc.childs.");
str.append(text.substring(1, text.length()));
str.append(side == 2 ? ")" : "");
}
else {
str.append(
"doc.id in (select items.document.parent from "
+ Item.class.getName()
+ " items where items.name='").append(fieldName)
.append("' AND ");
if (opt==DqlTokenTypes.ILIKE) {
str.append("lower(items.varcharvalue)");
}
else {
str.append("items.varcharvalue");
}
}
}
else if (text.startsWith("$")) {
str.append(side == 1 ? "(" : "");
str.append("doc.");
str.append(text.substring(1, text.length()));
str.append(side == 2 ? ")" : "");
}
else if (text.startsWith("#")) {
str.append(side == 1 ? "(" : "");
String paramName = text.substring(1, text.length());
Object obj = params.getParameter(paramName);
if (opt==DqlTokenTypes.ILIKE) {
str.append("lower(");
}
str.append("'");
if (obj != null && obj instanceof String) {
String paramValue = (String) obj;
if (paramValue.equals("")) {
paramValue = "%";
} else {
paramValue = paramValue.replaceAll("\n\r", "%");
paramValue = paramValue.replaceAll("\n", "%");
}
if (!paramValue.startsWith("%")) {
str.append("%");
}
str.append(paramValue);
if (!paramValue.endsWith("%")) {
str.append("%");
}
} else {
str.append('%');
}
str.append("'");
if (opt==DqlTokenTypes.ILIKE) {
str.append(")");
}
str.append(side == 2 ? ")" : "");
} else {
str.append(
"doc.id in (select items.document from "
+ Item.class.getName()
+ " items where items.name='").append(text)
.append("' AND ");
if (opt==DqlTokenTypes.ILIKE) {
str.append("lower(items.varcharvalue)");
}
else {
str.append("items.varcharvalue");
}
}
} else {
str.append(side == 1 ? "(" : "");
if (opt==DqlTokenTypes.ILIKE) {
str.append("lower(");
str.append(text);
str.append(")");
}
else {
str.append(text);
}
str.append(side == 2 ? ")" : "");
}
}
return str.toString();
}
public static String parseToHQL(String dql, ParamsTable params)
throws Exception {
DqlBaseLexer lexer = new DqlBaseLexer(new StringReader(dql));
DqlBaseParser parser = new DqlBaseParser(lexer);
parser.exprList();
// parser.whenClause();
AST t = parser.getAST();
ExprTreeParser treeParser = new ExprTreeParser();
String x = treeParser.expr(t, params, 0, 0);
return x;
}
public static String parseToHQL(String dql) throws Exception {
return parseToHQL(dql, new ParamsTable());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -