ElasticStatement.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package org.es.jdbc.api;
  2. import org.elasticsearch.action.search.SearchRequestBuilder;
  3. import org.elasticsearch.action.search.SearchResponse;
  4. import org.es.jdbc.es.JdbcSearchActionExecutor;
  5. import org.es.jdbc.es.JdbcSearchResponseExtractor;
  6. import org.es.sql.dsl.bean.ElasticSqlParseResult;
  7. import org.es.sql.dsl.parser.ElasticSql2DslParser;
  8. import java.sql.Connection;
  9. import java.sql.ResultSet;
  10. import java.sql.SQLException;
  11. public class ElasticStatement extends AbstractStatement {
  12. protected ElasticConnection connection;
  13. protected ResultSet executeResult;
  14. public ElasticStatement(ElasticConnection connection) {
  15. this.connection = connection;
  16. }
  17. @Override
  18. public ResultSet getResultSet() throws SQLException {
  19. return executeResult;
  20. }
  21. @Override
  22. public Connection getConnection() throws SQLException {
  23. return connection;
  24. }
  25. @Override
  26. public boolean execute(String sql) throws SQLException {
  27. executeQuery(sql);
  28. return true;
  29. }
  30. @Override
  31. public ResultSet executeQuery(String sql) throws SQLException {
  32. return executeQuery(sql, null);
  33. }
  34. @Override
  35. public ResultSet executeQuery(String sql, Object[] args) throws SQLException {
  36. ElasticSqlParseResult parseResult;
  37. try {
  38. ElasticSql2DslParser sql2DslParser = new ElasticSql2DslParser();
  39. parseResult = sql2DslParser.parse(sql, args);
  40. }
  41. catch (Exception exp) {
  42. throw new SQLException(String.format("[ElasticStatement] Failed to parse sql[%s]", sql), exp);
  43. }
  44. SearchResponse searchResponse;
  45. try {
  46. SearchRequestBuilder searchRequest = parseResult.toRequest(connection.getClient());
  47. searchResponse = JdbcSearchActionExecutor.get().syncExecuteWithException(searchRequest);
  48. }
  49. catch (Exception exp) {
  50. throw new SQLException(String.format("[ElasticStatement] Failed to execute es request sql[%s]", sql), exp);
  51. }
  52. JdbcSearchResponseExtractor responseExtractor = new JdbcSearchResponseExtractor();
  53. String searchResponseGson = responseExtractor.extractSearchResponse(searchResponse);
  54. return executeResult = new ElasticResultSet(this, searchResponseGson);
  55. }
  56. }