package org.ohdsi.webapi.service; import java.util.HashMap; import java.util.ArrayList; import javax.servlet.ServletContext; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import org.ohdsi.sql.SqlRender; import org.ohdsi.sql.SqlTranslate; import org.ohdsi.webapi.sqlrender.SourceStatement; import org.ohdsi.webapi.sqlrender.TranslatedStatement; /** * * @author Lee Evans */ @Path("/sqlrender/") public class SqlRenderService { @Context ServletContext context; @Path("translate") @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public TranslatedStatement translateSQL(SourceStatement sourceStatement) { TranslatedStatement translated = new TranslatedStatement(); try { String parameterKeys[] = getMapKeys(sourceStatement.parameters); String parameterValues[] = getMapValues(sourceStatement.parameters, parameterKeys); String renderedSQL = SqlRender.renderSql(sourceStatement.sql, parameterKeys, parameterValues ); if ((sourceStatement.targetDialect == null) || ("sql server".equals(sourceStatement.targetDialect))) { translated.targetSQL = renderedSQL; } else { translated.targetSQL = SqlTranslate.translateSql(renderedSQL, "sql server", sourceStatement.targetDialect); } } catch (Exception exception) { throw new RuntimeException(exception); } return translated; } private String[] getMapKeys(HashMap<String,String> parameters) { if (parameters == null) { return null; } else { return parameters.keySet().toArray(new String[parameters.keySet().size()]); } } private String[] getMapValues(HashMap<String,String> parameters, String[] parameterKeys) { ArrayList<String> parameterValues = new ArrayList<>(); if (parameters == null) { return null; } else { for (String parameterKey : parameterKeys) { parameterValues.add((String) parameters.get(parameterKey)); } return parameterValues.toArray(new String[parameterValues.size()]); } } }