private SqlNode parseSqlInternal(ParametersContext context, String sql){ StringBuilder builder=new StringBuilder(sql.length()); int pos=0; boolean find=false; while(pos<sql.length()){ int start=sql.indexOf(getExpressionConverter().getPlaceholderPrefix(), pos); if (start>=0){ int end=sql.indexOf(getExpressionConverter().getPlaceholderSuffix(), start+getExpressionConverter().getPlaceholderPrefix().length()); if (end<0){ toInvalidTextException(sql,pos, "placeholderSuffix["+getExpressionConverter().getPlaceholderSuffix()+"] not found."); } builder.append(sql.substring(pos, start)); String expression=sql.substring(start+getExpressionConverter().getPlaceholderPrefix().length(), end); builder.append("/*"+expression+"*/'1'"); pos=end+1; find=true; } else{ builder.append(sql.substring(pos)); break; } } SqlNode node; if (find){ node=SqlParser.getInstance().parse(builder.toString()); } else{ node=SqlParser.getInstance().parse(sql); } return node; }
/** * SQLを解析してファイルデータをファイルデータで置換します。 * @param sql 解析前のSQL * @return 解析済みSQL */ public SqlNode parseSql(ParametersContext context, String sql){ if (getExpressionConverter().isPlaceholders()){ return parseSqlInternal(context, sql); } else{ return SqlParser.getInstance().parse(sql); } }
StringBuilder sql = new StringBuilder("SELECT * "); sql.append("FROM " + tableName.toString()); SqlNode node = SqlParser.getInstance().parse(sql.toString()); ParametersContext context = newParametersContext(connection, null, null); final Dialect dialact = this.getDialect();
@Override public List<SqlNode> getAll(String sqlId, Dialect dialect) { String databaseProductName = getProductName(dialect); List<String> sqls=null; if (databaseProductName == null) { sqls = getInternal(sqlId); if (CommonUtils.isEmpty(sqls)) { return Collections.emptyList(); } } else { sqls = getInternal(sqlId, databaseProductName); if (CommonUtils.isEmpty(sqls)) { sqls = getInternal(sqlId); } if (CommonUtils.isEmpty(sqls)) { return Collections.emptyList(); } } List<SqlNode> result=CommonUtils.list(sqls.size()); for(String sql:sqls){ if (!CommonUtils.isEmpty(sql)){ SqlNode node = this.getSqlParser().parse(sql); result.add(node); } } return result; }
private SqlNode getStringInternal(Class<?> clazz, String sqlFile) { InputStream inp = FileUtils.getInputStream(clazz, sqlFile); String sql = null; try { String basePath=getBasePath(clazz); if (inp == null) { inp = FileUtils.getInputStream(basePath + sqlFile); } if (inp==null) { return null; } sql = readText(inp, "utf8"); } finally { FileUtils.close(inp); } SqlNode node = SqlParser.getInstance().parse(trim(sql)); return node; }