package org.apache.blur.jdbc;
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.util.List;
import org.apache.blur.jdbc.abstractimpl.AbstractBlurStatement;
import org.apache.blur.jdbc.parser.Parser;
import org.apache.blur.thirdparty.thrift_0_9_0.TException;
import org.apache.blur.thrift.BlurClient;
import org.apache.blur.thrift.generated.Blur.Iface;
import org.apache.blur.thrift.generated.BlurException;
public class BlurStatement extends AbstractBlurStatement {
private BlurConnection connection;
private int maxRows;
private String sql;
public BlurStatement(BlurConnection connection) {
this.connection = connection;
}
public int getMaxRows() throws SQLException {
return maxRows;
}
public void setMaxRows(int maxRows) throws SQLException {
this.maxRows = maxRows;
}
public int getUpdateCount() throws SQLException {
return -1;
}
@Override
public ResultSet executeQuery(String sql) throws SQLException {
execute(sql);
return getResultSet();
}
public boolean execute(String sql) throws SQLException {
this.sql = sql;
return true;
}
public ResultSet getResultSet() throws SQLException {
try {
System.out.println(sql);
Iface client = BlurClient.getClient(connection.getConnectionString());
Parser parser = new Parser();
parser.parse(sql);
if (isSuperQuery(parser, client)) {
System.out.println("super");
return new BlurResultSetRows(client, parser);
} else {
return new BlurResultSetRecords(client, parser);
}
} catch (Exception e) {
e.printStackTrace();
throw new SQLException("Unknown Error", e);
}
}
private boolean isSuperQuery(Parser parser, Iface client) throws BlurException, TException, SQLException {
String tableName = parser.getTableName();
List<String> tableList = client.tableList();
if (tableList.contains(tableName)) {
return true;
}
int lastIndexOf = tableName.lastIndexOf('.');
if (lastIndexOf < 0) {
throw new SQLException("Table [" + tableName + "] does not exist.");
}
if (tableList.contains(tableName.substring(0, lastIndexOf))) {
return false;
}
throw new SQLException("Table [" + tableName + "] does not exist.");
}
public void addBatch(String s) throws SQLException {
}
public void cancel() throws SQLException {
// @TODO fix this
// try {
// BlurClientManager.execute(connection.getHost() + ":" +
// connection.getPort(), new BlurCommand<Void>() {
// @Override
// public Void call(Client client) throws Exception {
// client.cancelQuery(uuid);
// return null;
// }
// });
// } catch (Exception e) {
// throw new SQLException(e);
// }
}
public void clearBatch() throws SQLException {
}
public void clearWarnings() throws SQLException {
}
public void close() throws SQLException {
}
public Connection getConnection() throws SQLException {
return connection;
}
public SQLWarning getWarnings() throws SQLException {
return new BlurWarnings();
}
}