package org.sql2o.quirks.parameterparsing.impl; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * Created by lars on 22.09.2014. */ public class ParameterParser implements CharParser{ private final Map<String, List<Integer>> parameterMap; int paramIdx = 1; public ParameterParser(Map<String, List<Integer>> parameterMap) { this.parameterMap = parameterMap; } @Override public boolean canParse(char c, String sql, int idx) { return sql.length() > idx + 1 && c == ':' && Character.isJavaIdentifierStart( sql.charAt(idx + 1) ) && sql.charAt(idx-1) != ':'; } @Override public int parse(char c, int idx, StringBuilder parsedSql, String sql, int length) { int startIdx = idx; idx += 1; while (idx + 1 < length && Character.isJavaIdentifierPart(sql.charAt(idx + 1))) { idx += 1; } String name = sql.substring(startIdx + 1, idx + 1); List<Integer> indices = parameterMap.get(name); if (indices == null) { indices = new ArrayList<>(); parameterMap.put(name, indices); } indices.add(paramIdx++); parsedSql.append("?"); return idx; } }