Author: rareddy
Date: 2011-04-29 14:34:21 -0400 (Fri, 29 Apr 2011)
New Revision: 3133
Modified:
trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java
trunk/runtime/src/main/java/org/teiid/odbc/ODBCServerRemoteImpl.java
trunk/runtime/src/main/java/org/teiid/transport/PgBackendProtocol.java
trunk/runtime/src/main/java/org/teiid/transport/PgFrontendProtocol.java
Log:
TEIID-1572: Adding suport for SET and SHOW command in ODBC.
Modified: trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java
===================================================================
--- trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java 2011-04-29 15:07:18 UTC
(rev 3132)
+++ trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java 2011-04-29 18:34:21 UTC
(rev 3133)
@@ -163,7 +163,7 @@
protected Map outParamIndexMap = new HashMap();
private static Pattern TRANSACTION_STATEMENT =
Pattern.compile("\\s*(commit|rollback|(start\\s*transaction))\\s*;?",
Pattern.CASE_INSENSITIVE); //$NON-NLS-1$
- private static Pattern SET_STATEMENT =
Pattern.compile("\\s*set\\s*(\\w+)\\s*(\\w*);?", Pattern.CASE_INSENSITIVE);
//$NON-NLS-1$
+ private static Pattern SET_STATEMENT =
Pattern.compile("\\s*set\\s*(\\w+)\\s*([^;]*);?", Pattern.CASE_INSENSITIVE);
//$NON-NLS-1$
private static Pattern SHOW_STATEMENT =
Pattern.compile("\\s*show\\s*(\\w*);?", Pattern.CASE_INSENSITIVE);
//$NON-NLS-1$
/**
* Factory Constructor
Modified: trunk/runtime/src/main/java/org/teiid/odbc/ODBCServerRemoteImpl.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/odbc/ODBCServerRemoteImpl.java 2011-04-29
15:07:18 UTC (rev 3132)
+++ trunk/runtime/src/main/java/org/teiid/odbc/ODBCServerRemoteImpl.java 2011-04-29
18:34:21 UTC (rev 3133)
@@ -25,7 +25,9 @@
import java.io.StringReader;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
import java.util.Collections;
+import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -179,6 +181,13 @@
info.put("password", password); //$NON-NLS-1$
this.connection = (ConnectionImpl)driver.connect(url, info);
int hash = this.connection.getConnectionId().hashCode();
+ Enumeration keys = this.props.propertyNames();
+ while (keys.hasMoreElements()) {
+ String key = (String)keys.nextElement();
+ Statement stmt = this.connection.createStatement();
+ stmt.execute("SET " + key + " '" +
this.props.getProperty(key) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
//$NON-NLS-3$
+ stmt.close();
+ }
this.client.authenticationSucess(hash, hash);
ready();
} catch (SQLException e) {
@@ -674,8 +683,15 @@
try {
ResultsFuture<Void> result = null;
if (future.get()) {
- result = new ResultsFuture<Void>();
- client.sendResults(sql, stmt.getResultSet(), result,
true);
+ if (stmt.getResultSet() != null) {
+ result = new ResultsFuture<Void>();
+ client.sendResults(sql, stmt.getResultSet(), result,
true);
+ }
+ else {
+ // handles the "SET" commands.
+ result = ResultsFuture.NULL_FUTURE;
+ client.sendUpdateCount(sql, 0);
+ }
} else {
result = ResultsFuture.NULL_FUTURE;
client.sendUpdateCount(sql, stmt.getUpdateCount());
Modified: trunk/runtime/src/main/java/org/teiid/transport/PgBackendProtocol.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/transport/PgBackendProtocol.java 2011-04-29
15:07:18 UTC (rev 3132)
+++ trunk/runtime/src/main/java/org/teiid/transport/PgBackendProtocol.java 2011-04-29
18:34:21 UTC (rev 3133)
@@ -417,7 +417,9 @@
tag = "COMMIT";
} else if (sql.startsWith("ROLLBACK")) {
tag = "ROLLBACK";
- } else {
+ } else if (sql.startsWith("SET ")) {
+ tag = "SET";
+ }else {
trace("Check command tag:", sql);
tag = "UPDATE " + updateCount;
}
Modified: trunk/runtime/src/main/java/org/teiid/transport/PgFrontendProtocol.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/transport/PgFrontendProtocol.java 2011-04-29
15:07:18 UTC (rev 3132)
+++ trunk/runtime/src/main/java/org/teiid/transport/PgFrontendProtocol.java 2011-04-29
18:34:21 UTC (rev 3133)
@@ -31,6 +31,7 @@
import java.lang.reflect.Proxy;
import java.nio.charset.Charset;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.Properties;
import org.jboss.netty.buffer.ChannelBuffer;
@@ -209,6 +210,10 @@
this.user = props.getProperty("user");
this.databaseName = props.getProperty("database");
String clientEncoding = props.getProperty("client_encoding",
"UTF-8");
+ props.setProperty("client_encoding", clientEncoding);
+ props.setProperty("default_transaction_isolation", "read
committed");
+ props.setProperty("DateStyle", "ISO");
+ props.setProperty("TimeZone",
Calendar.getInstance().getTimeZone().getDisplayName());
Charset cs = PGCharsetConverter.getCharset(clientEncoding);
if (cs != null) {
this.encoding = cs;
Show replies by date