activerecord-jdbc-adapter 1.3.7 → 1.3.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +33 -3
  3. data/Appraisals +11 -5
  4. data/Gemfile +21 -15
  5. data/History.md +31 -1
  6. data/lib/active_record/connection_adapters/mariadb_adapter.rb +1 -0
  7. data/lib/arel/visitors/firebird.rb +7 -10
  8. data/lib/arel/visitors/h2.rb +9 -0
  9. data/lib/arel/visitors/sql_server.rb +21 -2
  10. data/lib/arjdbc/h2/adapter.rb +31 -2
  11. data/lib/arjdbc/h2/connection_methods.rb +1 -1
  12. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  13. data/lib/arjdbc/jdbc/column.rb +2 -1
  14. data/lib/arjdbc/mssql/adapter.rb +40 -23
  15. data/lib/arjdbc/mssql/column.rb +4 -4
  16. data/lib/arjdbc/mysql/adapter.rb +36 -10
  17. data/lib/arjdbc/mysql/column.rb +12 -7
  18. data/lib/arjdbc/mysql/connection_methods.rb +53 -21
  19. data/lib/arjdbc/oracle/adapter.rb +22 -5
  20. data/lib/arjdbc/postgresql/adapter.rb +54 -18
  21. data/lib/arjdbc/postgresql/base/array_parser.rb +95 -0
  22. data/lib/arjdbc/postgresql/base/oid.rb +460 -0
  23. data/lib/arjdbc/postgresql/column.rb +50 -15
  24. data/lib/arjdbc/postgresql/oid_types.rb +126 -0
  25. data/lib/arjdbc/tasks/h2_database_tasks.rb +4 -2
  26. data/lib/arjdbc/version.rb +1 -1
  27. data/rakelib/02-test.rake +3 -30
  28. data/src/java/arjdbc/derby/DerbyModule.java +0 -8
  29. data/src/java/arjdbc/derby/DerbyRubyJdbcConnection.java +1 -0
  30. data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +2 -0
  31. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +8 -8
  32. data/src/java/arjdbc/mssql/MSSQLModule.java +50 -19
  33. data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +1 -0
  34. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +6 -6
  35. data/src/java/arjdbc/oracle/OracleModule.java +1 -1
  36. data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +66 -2
  37. data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +23 -10
  38. data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +1 -0
  39. data/src/java/arjdbc/util/CallResultSet.java +826 -0
  40. data/src/java/arjdbc/util/QuotingUtils.java +14 -7
  41. metadata +8 -3
  42. data/lib/arjdbc/postgresql/array_parser.rb +0 -89
@@ -51,6 +51,7 @@ import org.jruby.util.ByteList;
51
51
  * @author nicksieger
52
52
  */
53
53
  public class MSSQLRubyJdbcConnection extends RubyJdbcConnection {
54
+ private static final long serialVersionUID = -745716565005219263L;
54
55
 
55
56
  protected MSSQLRubyJdbcConnection(Ruby runtime, RubyClass metaClass) {
56
57
  super(runtime, metaClass);
@@ -39,13 +39,12 @@ import java.sql.Statement;
39
39
  import java.sql.Time;
40
40
  import java.sql.Timestamp;
41
41
  import java.sql.Types;
42
- import java.util.ArrayList;
43
- import java.util.List;
44
42
  import java.util.TimeZone;
45
43
  import java.util.regex.Matcher;
46
44
  import java.util.regex.Pattern;
47
45
 
48
46
  import org.jruby.Ruby;
47
+ import org.jruby.RubyArray;
49
48
  import org.jruby.RubyClass;
50
49
  import org.jruby.RubyFloat;
51
50
  import org.jruby.RubyModule;
@@ -60,6 +59,7 @@ import org.jruby.runtime.builtin.IRubyObject;
60
59
  * @author nicksieger
61
60
  */
62
61
  public class MySQLRubyJdbcConnection extends RubyJdbcConnection {
62
+ private static final long serialVersionUID = -8842614212147138733L;
63
63
 
64
64
  protected MySQLRubyJdbcConnection(Ruby runtime, RubyClass metaClass) {
65
65
  super(runtime, metaClass);
@@ -173,7 +173,7 @@ public class MySQLRubyJdbcConnection extends RubyJdbcConnection {
173
173
  query.append(jdbcTableName);
174
174
  query.append(" WHERE key_name != 'PRIMARY'");
175
175
 
176
- final List<IRubyObject> indexes = new ArrayList<IRubyObject>();
176
+ final RubyArray indexes = runtime.newArray(8);
177
177
  PreparedStatement statement = null;
178
178
  ResultSet keySet = null;
179
179
 
@@ -199,11 +199,11 @@ public class MySQLRubyJdbcConnection extends RubyJdbcConnection {
199
199
  runtime.newArray() // lengths
200
200
  };
201
201
 
202
- indexes.add( indexDefinition.callMethod(context, "new", args) ); // IndexDefinition.new
202
+ indexes.append( indexDefinition.callMethod(context, "new", args) ); // IndexDefinition.new
203
203
  }
204
204
 
205
- IRubyObject lastIndexDef = indexes.isEmpty() ? null : indexes.get(indexes.size() - 1);
206
- if (lastIndexDef != null) {
205
+ IRubyObject lastIndexDef = indexes.isEmpty() ? null : indexes.entry(-1);
206
+ if ( lastIndexDef != null ) {
207
207
  final String columnName = caseConvertIdentifierForRails(connection, keySet.getString("column_name"));
208
208
  final int length = keySet.getInt("sub_part");
209
209
  final boolean nullLength = keySet.wasNull();
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * The MIT License
3
3
  *
4
- * Copyright 2013 Karol Bucek.
4
+ * Copyright 2013-2014 Karol Bucek.
5
5
  *
6
6
  * Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  * of this software and associated documentation files (the "Software"), to deal
@@ -1,5 +1,5 @@
1
1
  /***** BEGIN LICENSE BLOCK *****
2
- * Copyright (c) 2012-2013 Karol Bucek <self@kares.org>
2
+ * Copyright (c) 2012-2014 Karol Bucek <self@kares.org>
3
3
  * Copyright (c) 2006-2010 Nick Sieger <nick@nicksieger.com>
4
4
  * Copyright (c) 2006-2007 Ola Bini <ola.bini@gmail.com>
5
5
  * Copyright (c) 2008-2009 Thomas E Enebo <enebo@acm.org>
@@ -27,9 +27,11 @@ package arjdbc.oracle;
27
27
 
28
28
  import arjdbc.jdbc.Callable;
29
29
  import arjdbc.jdbc.RubyJdbcConnection;
30
+ import arjdbc.util.CallResultSet;
30
31
 
31
32
  import java.io.IOException;
32
33
  import java.io.Reader;
34
+ import java.sql.CallableStatement;
33
35
  import java.sql.Connection;
34
36
  import java.sql.ResultSet;
35
37
  import java.sql.SQLException;
@@ -38,6 +40,7 @@ import java.sql.PreparedStatement;
38
40
  import java.sql.Statement;
39
41
  import java.sql.Types;
40
42
  import java.util.ArrayList;
43
+ import java.util.Collections;
41
44
  import java.util.List;
42
45
 
43
46
  import org.jruby.Ruby;
@@ -54,6 +57,7 @@ import org.jruby.runtime.builtin.IRubyObject;
54
57
  * @author nicksieger
55
58
  */
56
59
  public class OracleRubyJdbcConnection extends RubyJdbcConnection {
60
+ private static final long serialVersionUID = -6469731781108431512L;
57
61
 
58
62
  protected OracleRubyJdbcConnection(Ruby runtime, RubyClass metaClass) {
59
63
  super(runtime, metaClass);
@@ -93,6 +97,66 @@ public class OracleRubyJdbcConnection extends RubyJdbcConnection {
93
97
  });
94
98
  }
95
99
 
100
+ @JRubyMethod(name = "execute_insert_returning", required = 2)
101
+ public IRubyObject execute_insert_returning(final ThreadContext context,
102
+ final IRubyObject sql, final IRubyObject binds) throws SQLException {
103
+ final String query = sql.convertToString().getUnicodeValue();
104
+ final int outType = Types.VARCHAR;
105
+ if ( binds == null || binds.isNil() ) { // no prepared statements
106
+ return executePreparedCall(context, query, Collections.EMPTY_LIST, outType);
107
+ }
108
+ else { // allow prepared statements with empty binds parameters
109
+ return executePreparedCall(context, query, (List) binds, outType);
110
+ }
111
+ }
112
+
113
+ private IRubyObject executePreparedCall(final ThreadContext context, final String query,
114
+ final List<?> binds, final int outType) {
115
+ return withConnection(context, new Callable<IRubyObject>() {
116
+ public IRubyObject call(final Connection connection) throws SQLException {
117
+ CallableStatement statement = null;
118
+ final int outIndex = binds.size() + 1;
119
+ try {
120
+ statement = connection.prepareCall("{call " + query + " }");
121
+ setStatementParameters(context, connection, statement, binds);
122
+ statement.registerOutParameter(outIndex, outType);
123
+ statement.executeUpdate();
124
+ ResultSet resultSet = new CallResultSet(statement);
125
+ return jdbcToRuby(context, context.getRuntime(), outIndex, outType, resultSet);
126
+ }
127
+ catch (final SQLException e) {
128
+ debugErrorSQL(context, query);
129
+ throw e;
130
+ }
131
+ finally { close(statement); }
132
+ }
133
+ });
134
+ }
135
+
136
+ protected static final boolean generatedKeys;
137
+ static {
138
+ final String genKeys = System.getProperty("arjdbc.oracle.generated_keys");
139
+ if ( genKeys == null ) {
140
+ generatedKeys = true; // by default
141
+ }
142
+ else {
143
+ generatedKeys = Boolean.parseBoolean(genKeys);
144
+ }
145
+ }
146
+
147
+ @Override
148
+ protected IRubyObject mapGeneratedKeys(
149
+ final Ruby runtime, final Connection connection,
150
+ final Statement statement, final Boolean singleResult)
151
+ throws SQLException {
152
+ if ( generatedKeys ) {
153
+ return super.mapGeneratedKeys(runtime, connection, statement, singleResult);
154
+ }
155
+ return null; // disabled using -Darjdbc.oracle.generated_keys=false
156
+ }
157
+
158
+ private static final boolean returnRowID = Boolean.getBoolean("arjdbc.oracle.generated_keys.rowid");
159
+
96
160
  @Override // NOTE: Invalid column type:
97
161
  // getLong not implemented for class oracle.jdbc.driver.T4CRowidAccessor
98
162
  protected IRubyObject mapGeneratedKey(final Ruby runtime, final ResultSet genKeys)
@@ -103,7 +167,7 @@ public class OracleRubyJdbcConnection extends RubyJdbcConnection {
103
167
  return runtime.newFixnum( Long.parseLong(value) );
104
168
  }
105
169
  else {
106
- return runtime.getNil();
170
+ return returnRowID ? runtime.newString(value) : runtime.getNil();
107
171
  }
108
172
  }
109
173
 
@@ -66,6 +66,7 @@ import org.postgresql.util.PGobject;
66
66
  * @author enebo
67
67
  */
68
68
  public class PostgreSQLRubyJdbcConnection extends arjdbc.jdbc.RubyJdbcConnection {
69
+ private static final long serialVersionUID = 7235537759545717760L;
69
70
 
70
71
  protected PostgreSQLRubyJdbcConnection(Ruby runtime, RubyClass metaClass) {
71
72
  super(runtime, metaClass);
@@ -86,22 +87,29 @@ public class PostgreSQLRubyJdbcConnection extends arjdbc.jdbc.RubyJdbcConnection
86
87
  };
87
88
 
88
89
  // enables testing if the bug is fixed (please run our test-suite)
89
- // using `rake test_postgresql JRUBY_OPTS="-J-Darjdbc.postgresql.generated.keys=true"`
90
- protected static final boolean generatedKeys = Boolean.getBoolean("arjdbc.postgresql.generated.keys");
90
+ // using `rake test_postgresql JRUBY_OPTS="-J-Darjdbc.postgresql.generated_keys=true"`
91
+ protected static final boolean generatedKeys;
92
+ static {
93
+ String genKeys = System.getProperty("arjdbc.postgresql.generated_keys");
94
+ if ( genKeys == null ) { // @deprecated system property name :
95
+ genKeys = System.getProperty("arjdbc.postgresql.generated.keys");
96
+ }
97
+ generatedKeys = Boolean.parseBoolean(genKeys);
98
+ }
91
99
 
92
100
  @Override
93
101
  protected IRubyObject mapGeneratedKeys(
94
102
  final Ruby runtime, final Connection connection,
95
103
  final Statement statement, final Boolean singleResult)
96
104
  throws SQLException {
97
- if ( generatedKeys ) {
98
- super.mapGeneratedKeys(runtime, connection, statement, singleResult);
99
- }
100
105
  // NOTE: PostgreSQL driver supports generated keys but does not work
101
106
  // correctly for all cases e.g. for tables whene no keys are generated
102
107
  // during an INSERT getGeneratedKeys return all inserted rows instead
103
108
  // of an empty result set ... thus disabled until issue is resolved !
104
- return null; // not supported
109
+ if ( ! generatedKeys ) return null; // not supported
110
+ // NOTE: generated-keys is implemented by the Postgre's JDBC driver by
111
+ // adding a "RETURNING" suffix after the executeUpdate passed query ...
112
+ return super.mapGeneratedKeys(runtime, connection, statement, singleResult);
105
113
  }
106
114
 
107
115
  // storesMixedCaseIdentifiers() return false;
@@ -234,7 +242,8 @@ public class PostgreSQLRubyJdbcConnection extends arjdbc.jdbc.RubyJdbcConnection
234
242
  final String valueStr = value.asString().toString();
235
243
  if ( sqlType != null ) {
236
244
  if ( rawArrayType == Boolean.TRUE && sqlType.getByteList().endsWith( ARRAY_END ) ) {
237
- final Array valueArr = new Jdbc4Array(connection.unwrap(BaseConnection.class), oidType(column), valueStr);
245
+ final int oid = oid(context, column);
246
+ final Array valueArr = new Jdbc4Array(connection.unwrap(BaseConnection.class), oid, valueStr);
238
247
  statement.setArray(index, valueArr); return;
239
248
  }
240
249
  if ( sqlType.getByteList().startsWith( INTERVAL ) ) {
@@ -245,9 +254,13 @@ public class PostgreSQLRubyJdbcConnection extends arjdbc.jdbc.RubyJdbcConnection
245
254
  }
246
255
  }
247
256
 
248
- private static int oidType(final IRubyObject column) {
249
- final IRubyObject oid_type = column.getInstanceVariables().getInstanceVariable("@oid_type");
250
- return RubyFixnum.fix2int(oid_type);
257
+ private static int oid(final ThreadContext context, final IRubyObject column) {
258
+ // our column convention :
259
+ IRubyObject oid = column.getInstanceVariables().getInstanceVariable("@oid");
260
+ if ( oid == null || oid.isNil() ) { // only for user instantiated Column
261
+ throw new IllegalStateException("missing @oid for column: " + column.inspect());
262
+ }
263
+ return RubyFixnum.fix2int(oid);
251
264
  }
252
265
 
253
266
  @Override
@@ -55,6 +55,7 @@ import org.jruby.util.ByteList;
55
55
  * @author enebo
56
56
  */
57
57
  public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
58
+ private static final long serialVersionUID = -5783855018818472773L;
58
59
 
59
60
  protected SQLite3RubyJdbcConnection(Ruby runtime, RubyClass metaClass) {
60
61
  super(runtime, metaClass);
@@ -0,0 +1,826 @@
1
+ /*
2
+ * The MIT License
3
+ *
4
+ * Copyright 2014 Karol Bucek.
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in
14
+ * all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ * THE SOFTWARE.
23
+ */
24
+ package arjdbc.util;
25
+
26
+ import java.io.InputStream;
27
+ import java.io.Reader;
28
+ import java.math.BigDecimal;
29
+ import java.net.URL;
30
+ import java.sql.Array;
31
+ import java.sql.Blob;
32
+ import java.sql.CallableStatement;
33
+ import java.sql.Clob;
34
+ import java.sql.Date;
35
+ import java.sql.NClob;
36
+ import java.sql.Ref;
37
+ import java.sql.ResultSet;
38
+ import java.sql.ResultSetMetaData;
39
+ import java.sql.RowId;
40
+ import java.sql.SQLException;
41
+ import java.sql.SQLFeatureNotSupportedException;
42
+ import java.sql.SQLWarning;
43
+ import java.sql.SQLXML;
44
+ import java.sql.Time;
45
+ import java.sql.Timestamp;
46
+ import java.util.Calendar;
47
+ import java.util.Map;
48
+
49
+ /**
50
+ * {@link ResultSet} "emulation" for {@link CallableStatement}.
51
+ *
52
+ * @author kares
53
+ */
54
+ public class CallResultSet implements ResultSet {
55
+
56
+ private final CallableStatement call;
57
+ private final int size; private int row;
58
+
59
+ public CallResultSet(CallableStatement call) {
60
+ this(call, 1);
61
+ }
62
+
63
+ public CallResultSet(CallableStatement call, final int size) {
64
+ this.call = call; this.size = size;
65
+ }
66
+
67
+ public CallableStatement getStatement() {
68
+ return call;
69
+ }
70
+
71
+ @SuppressWarnings("unchecked")
72
+ public <T> T unwrap(Class<T> iface) throws SQLException {
73
+ if ( iface.isAssignableFrom(getClass()) ) return (T) this;
74
+ return call.unwrap(iface);
75
+ }
76
+
77
+ public boolean isWrapperFor(Class<?> iface) throws SQLException {
78
+ if ( iface.isAssignableFrom(getClass()) ) return true;
79
+ return call.isWrapperFor(iface);
80
+ }
81
+
82
+ public int getHoldability() {
83
+ return 0;
84
+ // HOLD_CURSORS_OVER_COMMIT = 1
85
+ // CLOSE_CURSORS_AT_COMMIT = 2
86
+ }
87
+
88
+ public boolean isClosed() throws SQLException {
89
+ return call.isClosed();
90
+ }
91
+
92
+ public void close() throws SQLException {
93
+ // NOOP
94
+ }
95
+
96
+ public int getRow() { return row; }
97
+
98
+ public boolean absolute(int row) {
99
+ if ( row < 0 ) row = 0;
100
+ this.row = row; return row <= size && row > 0;
101
+ }
102
+ public boolean relative(int rows) {
103
+ return absolute(this.row + rows);
104
+ }
105
+
106
+ //public boolean next() {
107
+ // return ( ++row <= size );
108
+ //}
109
+
110
+ public boolean next() { return relative(+1); }
111
+ public boolean previous() { return relative(-1); }
112
+
113
+ public boolean first() { return absolute(1); }
114
+ public boolean last() { return absolute(-1); }
115
+
116
+ public boolean isBeforeFirst() { return row <= 0; }
117
+ public boolean isAfterLast() { return row > size; }
118
+
119
+ public boolean isFirst() { return row == 1; }
120
+ public boolean isLast() { return row == size; }
121
+
122
+ public void beforeFirst() { row = 0; }
123
+ public void afterLast() { row = size + 1; }
124
+
125
+ public ResultSetMetaData getMetaData() throws SQLException {
126
+ return call.getMetaData(); // NOTE: should be fine - right?
127
+ }
128
+
129
+ public int findColumn(String columnLabel) throws SQLException {
130
+ getObject(columnLabel); return 1;
131
+ }
132
+
133
+ public void setFetchDirection(int direction) throws SQLException {
134
+ call.setFetchDirection(direction);
135
+ }
136
+
137
+ public int getFetchDirection() throws SQLException {
138
+ return call.getFetchDirection();
139
+ }
140
+
141
+ public void setFetchSize(int rows) throws SQLException {
142
+ // NOOP
143
+ }
144
+
145
+ public int getFetchSize() throws SQLException {
146
+ return 1;
147
+ }
148
+
149
+ public int getType() throws SQLException {
150
+ return TYPE_SCROLL_INSENSITIVE;
151
+ }
152
+
153
+ public int getConcurrency() throws SQLException {
154
+ return CONCUR_READ_ONLY;
155
+ }
156
+
157
+
158
+ public boolean wasNull() throws SQLException {
159
+ return call.wasNull();
160
+ }
161
+
162
+ // GET-ERS :
163
+
164
+ public String getString(int columnIndex) throws SQLException {
165
+ return call.getString(columnIndex);
166
+ }
167
+
168
+ public boolean getBoolean(int columnIndex) throws SQLException {
169
+ return call.getBoolean(columnIndex);
170
+ }
171
+
172
+ public byte getByte(int columnIndex) throws SQLException {
173
+ return call.getByte(columnIndex);
174
+ }
175
+
176
+ public short getShort(int columnIndex) throws SQLException {
177
+ return call.getShort(columnIndex);
178
+ }
179
+
180
+ public int getInt(int columnIndex) throws SQLException {
181
+ return call.getInt(columnIndex);
182
+ }
183
+
184
+ public long getLong(int columnIndex) throws SQLException {
185
+ return call.getLong(columnIndex);
186
+ }
187
+
188
+ public float getFloat(int columnIndex) throws SQLException {
189
+ return call.getFloat(columnIndex);
190
+ }
191
+
192
+ public double getDouble(int columnIndex) throws SQLException {
193
+ return call.getDouble(columnIndex);
194
+ }
195
+
196
+ @SuppressWarnings("deprecation")
197
+ public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
198
+ return call.getBigDecimal(columnIndex, scale);
199
+ }
200
+
201
+ public byte[] getBytes(int columnIndex) throws SQLException {
202
+ return call.getBytes(columnIndex);
203
+ }
204
+
205
+ public Date getDate(int columnIndex) throws SQLException {
206
+ return call.getDate(columnIndex);
207
+ }
208
+
209
+ public Time getTime(int columnIndex) throws SQLException {
210
+ return call.getTime(columnIndex);
211
+ }
212
+
213
+ public Timestamp getTimestamp(int columnIndex) throws SQLException {
214
+ return call.getTimestamp(columnIndex);
215
+ }
216
+
217
+ public InputStream getAsciiStream(int columnIndex) throws SQLException {
218
+ throw new UnsupportedOperationException("getAsciiStream()");
219
+ }
220
+
221
+ @SuppressWarnings("deprecation")
222
+ public InputStream getUnicodeStream(int columnIndex) throws SQLException {
223
+ throw new UnsupportedOperationException("getUnicodeStream()");
224
+ }
225
+
226
+ public InputStream getBinaryStream(int columnIndex) throws SQLException {
227
+ throw new UnsupportedOperationException("getBinaryStream()");
228
+ }
229
+
230
+ public String getString(String columnLabel) throws SQLException {
231
+ return call.getString(columnLabel);
232
+ }
233
+
234
+ public boolean getBoolean(String columnLabel) throws SQLException {
235
+ return call.getBoolean(columnLabel);
236
+ }
237
+
238
+ public byte getByte(String columnLabel) throws SQLException {
239
+ return call.getByte(columnLabel);
240
+ }
241
+
242
+ public short getShort(String columnLabel) throws SQLException {
243
+ return call.getShort(columnLabel);
244
+ }
245
+
246
+ public int getInt(String columnLabel) throws SQLException {
247
+ return call.getInt(columnLabel);
248
+ }
249
+
250
+ public long getLong(String columnLabel) throws SQLException {
251
+ return call.getLong(columnLabel);
252
+ }
253
+
254
+ public float getFloat(String columnLabel) throws SQLException {
255
+ return call.getFloat(columnLabel);
256
+ }
257
+
258
+ public double getDouble(String columnLabel) throws SQLException {
259
+ return call.getDouble(columnLabel);
260
+ }
261
+
262
+ @SuppressWarnings("deprecation")
263
+ public BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException {
264
+ return call.getBigDecimal(columnLabel);
265
+ }
266
+
267
+ public byte[] getBytes(String columnLabel) throws SQLException {
268
+ return call.getBytes(columnLabel);
269
+ }
270
+
271
+ public Date getDate(String columnLabel) throws SQLException {
272
+ return call.getDate(columnLabel);
273
+ }
274
+
275
+ public Time getTime(String columnLabel) throws SQLException {
276
+ return call.getTime(columnLabel);
277
+ }
278
+
279
+ public Timestamp getTimestamp(String columnLabel) throws SQLException {
280
+ return call.getTimestamp(columnLabel);
281
+ }
282
+
283
+ public InputStream getAsciiStream(String columnLabel) throws SQLException {
284
+ throw new UnsupportedOperationException("getAsciiStream()");
285
+ }
286
+
287
+ @SuppressWarnings("deprecation")
288
+ public InputStream getUnicodeStream(String columnLabel) throws SQLException {
289
+ throw new UnsupportedOperationException("getUnicodeStream()");
290
+ }
291
+
292
+ public InputStream getBinaryStream(String columnLabel) throws SQLException {
293
+ throw new UnsupportedOperationException("getBinaryStream()");
294
+ }
295
+
296
+ public Object getObject(int columnIndex) throws SQLException {
297
+ return call.getObject(columnIndex);
298
+ }
299
+
300
+ public Object getObject(String columnLabel) throws SQLException {
301
+ return call.getObject(columnLabel);
302
+ }
303
+
304
+ public Reader getCharacterStream(int columnIndex) throws SQLException {
305
+ return call.getCharacterStream(columnIndex);
306
+ }
307
+
308
+ public Reader getCharacterStream(String columnLabel) throws SQLException {
309
+ return call.getCharacterStream(columnLabel);
310
+ }
311
+
312
+ public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
313
+ return call.getBigDecimal(columnIndex);
314
+ }
315
+
316
+ public BigDecimal getBigDecimal(String columnLabel) throws SQLException {
317
+ return call.getBigDecimal(columnLabel);
318
+ }
319
+
320
+ public Object getObject(int columnIndex, Map<String, Class<?>> map) throws SQLException {
321
+ return call.getObject(columnIndex, map);
322
+ }
323
+
324
+ public Ref getRef(int columnIndex) throws SQLException {
325
+ return call.getRef(columnIndex);
326
+ }
327
+
328
+ public Blob getBlob(int columnIndex) throws SQLException {
329
+ return call.getBlob(columnIndex);
330
+ }
331
+
332
+ public Clob getClob(int columnIndex) throws SQLException {
333
+ return call.getClob(columnIndex);
334
+ }
335
+
336
+ public Array getArray(int columnIndex) throws SQLException {
337
+ return call.getArray(columnIndex);
338
+ }
339
+
340
+ public Object getObject(String columnLabel, Map<String, Class<?>> map) throws SQLException {
341
+ return call.getObject(columnLabel, map);
342
+ }
343
+
344
+ public Ref getRef(String columnLabel) throws SQLException {
345
+ return call.getRef(columnLabel);
346
+ }
347
+
348
+ public Blob getBlob(String columnLabel) throws SQLException {
349
+ return call.getBlob(columnLabel);
350
+ }
351
+
352
+ public Clob getClob(String columnLabel) throws SQLException {
353
+ return call.getClob(columnLabel);
354
+ }
355
+
356
+ public Array getArray(String columnLabel) throws SQLException {
357
+ return call.getArray(columnLabel);
358
+ }
359
+
360
+ public Date getDate(int columnIndex, Calendar cal) throws SQLException {
361
+ return call.getDate(columnIndex, cal);
362
+ }
363
+
364
+ public Date getDate(String columnLabel, Calendar cal) throws SQLException {
365
+ return call.getDate(columnLabel, cal);
366
+ }
367
+
368
+ public Time getTime(int columnIndex, Calendar cal) throws SQLException {
369
+ return call.getTime(columnIndex, cal);
370
+ }
371
+
372
+ public Time getTime(String columnLabel, Calendar cal) throws SQLException {
373
+ return call.getTime(columnLabel, cal);
374
+ }
375
+
376
+ public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
377
+ return call.getTimestamp(columnIndex, cal);
378
+ }
379
+
380
+ public Timestamp getTimestamp(String columnLabel, Calendar cal) throws SQLException {
381
+ return call.getTimestamp(columnLabel, cal);
382
+ }
383
+
384
+ public URL getURL(int columnIndex) throws SQLException {
385
+ return call.getURL(columnIndex);
386
+ }
387
+
388
+ public URL getURL(String columnLabel) throws SQLException {
389
+ return call.getURL(columnLabel);
390
+ }
391
+
392
+ public RowId getRowId(int columnIndex) throws SQLException {
393
+ return call.getRowId(columnIndex);
394
+ }
395
+
396
+ public RowId getRowId(String columnLabel) throws SQLException {
397
+ return call.getRowId(columnLabel);
398
+ }
399
+
400
+ public NClob getNClob(int columnIndex) throws SQLException {
401
+ return call.getNClob(columnIndex);
402
+ }
403
+
404
+ public NClob getNClob(String columnLabel) throws SQLException {
405
+ return call.getNClob(columnLabel);
406
+ }
407
+
408
+ public SQLXML getSQLXML(int columnIndex) throws SQLException {
409
+ return call.getSQLXML(columnIndex);
410
+ }
411
+
412
+ public SQLXML getSQLXML(String columnLabel) throws SQLException {
413
+ return call.getSQLXML(columnLabel);
414
+ }
415
+
416
+ public String getNString(int columnIndex) throws SQLException {
417
+ return call.getNString(columnIndex);
418
+ }
419
+
420
+ public String getNString(String columnLabel) throws SQLException {
421
+ return call.getNString(columnLabel);
422
+ }
423
+
424
+ public Reader getNCharacterStream(int columnIndex) throws SQLException {
425
+ return call.getNCharacterStream(columnIndex);
426
+ }
427
+
428
+ public Reader getNCharacterStream(String columnLabel) throws SQLException {
429
+ return call.getNCharacterStream(columnLabel);
430
+ }
431
+
432
+ public <T> T getObject(int columnIndex, Class<T> type) throws SQLException {
433
+ return call.getObject(columnIndex, type);
434
+ }
435
+
436
+ public <T> T getObject(String columnLabel, Class<T> type) throws SQLException {
437
+ return call.getObject(columnLabel, type);
438
+ }
439
+
440
+
441
+ // NOT SUPPORTED OPERATIONS :
442
+
443
+
444
+ public SQLWarning getWarnings() throws SQLException {
445
+ return null; // NOOP
446
+ }
447
+
448
+ public void clearWarnings() throws SQLException {
449
+ // NOOP
450
+ }
451
+
452
+ public String getCursorName() throws SQLException {
453
+ return null; // NOOP
454
+ }
455
+
456
+
457
+ public boolean rowUpdated() throws SQLException {
458
+ throw new SQLFeatureNotSupportedException("row updates");
459
+ }
460
+
461
+ public boolean rowInserted() throws SQLException {
462
+ throw new SQLFeatureNotSupportedException("row inserts");
463
+ }
464
+
465
+ public boolean rowDeleted() throws SQLException {
466
+ throw new SQLFeatureNotSupportedException("row deletes");
467
+ }
468
+
469
+ public void insertRow() throws SQLException {
470
+ throw new SQLFeatureNotSupportedException("row inserts");
471
+ }
472
+
473
+ public void updateRow() throws SQLException {
474
+ throw new SQLFeatureNotSupportedException("row updates");
475
+ }
476
+
477
+ public void deleteRow() throws SQLException {
478
+ throw new SQLFeatureNotSupportedException("row deletes");
479
+ }
480
+
481
+ public void refreshRow() throws SQLException {
482
+ // NOOOP
483
+ }
484
+
485
+ public void cancelRowUpdates() throws SQLException {
486
+ // NOOP
487
+ }
488
+
489
+ public void moveToInsertRow() throws SQLException {
490
+ throw new SQLFeatureNotSupportedException();
491
+ }
492
+
493
+ public void moveToCurrentRow() throws SQLException {
494
+ throw new SQLFeatureNotSupportedException();
495
+ }
496
+
497
+
498
+ public void updateNull(int columnIndex) throws SQLException {
499
+ throw new SQLFeatureNotSupportedException("updates");
500
+ }
501
+
502
+ public void updateBoolean(int columnIndex, boolean x) throws SQLException {
503
+ throw new SQLFeatureNotSupportedException("updates");
504
+ }
505
+
506
+ public void updateByte(int columnIndex, byte x) throws SQLException {
507
+ throw new SQLFeatureNotSupportedException("updates");
508
+ }
509
+
510
+ public void updateShort(int columnIndex, short x) throws SQLException {
511
+ throw new SQLFeatureNotSupportedException("updates");
512
+ }
513
+
514
+ public void updateInt(int columnIndex, int x) throws SQLException {
515
+ throw new SQLFeatureNotSupportedException("updates");
516
+ }
517
+
518
+ public void updateLong(int columnIndex, long x) throws SQLException {
519
+ throw new SQLFeatureNotSupportedException("updates");
520
+ }
521
+
522
+ public void updateFloat(int columnIndex, float x) throws SQLException {
523
+ throw new SQLFeatureNotSupportedException("updates");
524
+ }
525
+
526
+ public void updateDouble(int columnIndex, double x) throws SQLException {
527
+ throw new SQLFeatureNotSupportedException("updates");
528
+ }
529
+
530
+ public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
531
+ throw new SQLFeatureNotSupportedException("updates");
532
+ }
533
+
534
+ public void updateString(int columnIndex, String x) throws SQLException {
535
+ throw new SQLFeatureNotSupportedException("updates");
536
+ }
537
+
538
+ public void updateBytes(int columnIndex, byte[] x) throws SQLException {
539
+ throw new SQLFeatureNotSupportedException("updates");
540
+ }
541
+
542
+ public void updateDate(int columnIndex, Date x) throws SQLException {
543
+ throw new SQLFeatureNotSupportedException("updates");
544
+ }
545
+
546
+ public void updateTime(int columnIndex, Time x) throws SQLException {
547
+ throw new SQLFeatureNotSupportedException("updates");
548
+ }
549
+
550
+ public void updateTimestamp(int columnIndex, Timestamp x) throws SQLException {
551
+ throw new SQLFeatureNotSupportedException("updates");
552
+ }
553
+
554
+ public void updateAsciiStream(int columnIndex, InputStream x, int length) throws SQLException {
555
+ throw new SQLFeatureNotSupportedException("updates");
556
+ }
557
+
558
+ public void updateBinaryStream(int columnIndex, InputStream x, int length) throws SQLException {
559
+ throw new SQLFeatureNotSupportedException("updates");
560
+ }
561
+
562
+ public void updateCharacterStream(int columnIndex, Reader x, int length) throws SQLException {
563
+ throw new SQLFeatureNotSupportedException("updates");
564
+ }
565
+
566
+ public void updateObject(int columnIndex, Object x, int scaleOrLength) throws SQLException {
567
+ throw new SQLFeatureNotSupportedException("updates");
568
+ }
569
+
570
+ public void updateObject(int columnIndex, Object x) throws SQLException {
571
+ throw new SQLFeatureNotSupportedException("updates");
572
+ }
573
+
574
+ public void updateNull(String columnLabel) throws SQLException {
575
+ throw new SQLFeatureNotSupportedException("updates");
576
+ }
577
+
578
+ public void updateBoolean(String columnLabel, boolean x) throws SQLException {
579
+ throw new SQLFeatureNotSupportedException("updates");
580
+ }
581
+
582
+ public void updateByte(String columnLabel, byte x) throws SQLException {
583
+ throw new SQLFeatureNotSupportedException("updates");
584
+ }
585
+
586
+ public void updateShort(String columnLabel, short x) throws SQLException {
587
+ throw new SQLFeatureNotSupportedException("updates");
588
+ }
589
+
590
+ public void updateInt(String columnLabel, int x) throws SQLException {
591
+ throw new SQLFeatureNotSupportedException("updates");
592
+ }
593
+
594
+ public void updateLong(String columnLabel, long x) throws SQLException {
595
+ throw new SQLFeatureNotSupportedException("updates");
596
+ }
597
+
598
+ public void updateFloat(String columnLabel, float x) throws SQLException {
599
+ throw new SQLFeatureNotSupportedException("updates");
600
+ }
601
+
602
+ public void updateDouble(String columnLabel, double x) throws SQLException {
603
+ throw new SQLFeatureNotSupportedException("updates");
604
+ }
605
+
606
+ public void updateBigDecimal(String columnLabel, BigDecimal x) throws SQLException {
607
+ throw new SQLFeatureNotSupportedException("updates");
608
+ }
609
+
610
+ public void updateString(String columnLabel, String x) throws SQLException {
611
+ throw new SQLFeatureNotSupportedException("updates");
612
+ }
613
+
614
+ public void updateBytes(String columnLabel, byte[] x) throws SQLException {
615
+ throw new SQLFeatureNotSupportedException("updates");
616
+ }
617
+
618
+ public void updateDate(String columnLabel, Date x) throws SQLException {
619
+ throw new SQLFeatureNotSupportedException("updates");
620
+ }
621
+
622
+ public void updateTime(String columnLabel, Time x) throws SQLException {
623
+ throw new SQLFeatureNotSupportedException("updates");
624
+ }
625
+
626
+ public void updateTimestamp(String columnLabel, Timestamp x) throws SQLException {
627
+ throw new SQLFeatureNotSupportedException("updates");
628
+ }
629
+
630
+ public void updateAsciiStream(String columnLabel, InputStream x, int length) throws SQLException {
631
+ throw new SQLFeatureNotSupportedException("updates");
632
+ }
633
+
634
+ public void updateBinaryStream(String columnLabel, InputStream x, int length) throws SQLException {
635
+ throw new SQLFeatureNotSupportedException("updates");
636
+ }
637
+
638
+ public void updateCharacterStream(String columnLabel, Reader reader, int length) throws SQLException {
639
+ throw new SQLFeatureNotSupportedException("updates");
640
+ }
641
+
642
+ public void updateObject(String columnLabel, Object x, int scaleOrLength) throws SQLException {
643
+ throw new SQLFeatureNotSupportedException("updates");
644
+ }
645
+
646
+ public void updateObject(String columnLabel, Object x) throws SQLException {
647
+ throw new SQLFeatureNotSupportedException("updates");
648
+ }
649
+
650
+ public void updateRef(int columnIndex, Ref x) throws SQLException {
651
+ throw new SQLFeatureNotSupportedException("updates");
652
+ }
653
+
654
+ public void updateRef(String columnLabel, Ref x) throws SQLException {
655
+ throw new SQLFeatureNotSupportedException("updates");
656
+ }
657
+
658
+ public void updateBlob(int columnIndex, Blob x) throws SQLException {
659
+ throw new SQLFeatureNotSupportedException("updates");
660
+ }
661
+
662
+ public void updateBlob(String columnLabel, Blob x) throws SQLException {
663
+ throw new SQLFeatureNotSupportedException("updates");
664
+ }
665
+
666
+ public void updateClob(int columnIndex, Clob x) throws SQLException {
667
+ throw new SQLFeatureNotSupportedException("updates");
668
+ }
669
+
670
+ public void updateClob(String columnLabel, Clob x) throws SQLException {
671
+ throw new SQLFeatureNotSupportedException("updates");
672
+ }
673
+
674
+ public void updateArray(int columnIndex, Array x) throws SQLException {
675
+ throw new SQLFeatureNotSupportedException("updates");
676
+ }
677
+
678
+ public void updateArray(String columnLabel, Array x) throws SQLException {
679
+ throw new SQLFeatureNotSupportedException("updates");
680
+ }
681
+
682
+ public void updateRowId(int columnIndex, RowId x) throws SQLException {
683
+ throw new SQLFeatureNotSupportedException("updates");
684
+ }
685
+
686
+ public void updateRowId(String columnLabel, RowId x) throws SQLException {
687
+ throw new SQLFeatureNotSupportedException("updates");
688
+ }
689
+
690
+ public void updateNString(int columnIndex, String nString) throws SQLException {
691
+ throw new SQLFeatureNotSupportedException("updates");
692
+ }
693
+
694
+ public void updateNString(String columnLabel, String nString) throws SQLException {
695
+ throw new SQLFeatureNotSupportedException("updates");
696
+ }
697
+
698
+ public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
699
+ throw new SQLFeatureNotSupportedException("updates");
700
+ }
701
+
702
+ public void updateNClob(String columnLabel, NClob nClob) throws SQLException {
703
+ throw new SQLFeatureNotSupportedException("updates");
704
+ }
705
+
706
+ public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
707
+ throw new SQLFeatureNotSupportedException("updates");
708
+ }
709
+
710
+ public void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException {
711
+ throw new SQLFeatureNotSupportedException("updates");
712
+ }
713
+
714
+ public void updateNCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
715
+ throw new SQLFeatureNotSupportedException("updates");
716
+ }
717
+
718
+ public void updateNCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
719
+ throw new SQLFeatureNotSupportedException("updates");
720
+ }
721
+
722
+ public void updateAsciiStream(int columnIndex, InputStream x, long length) throws SQLException {
723
+ throw new SQLFeatureNotSupportedException("updates");
724
+ }
725
+
726
+ public void updateBinaryStream(int columnIndex, InputStream x, long length) throws SQLException {
727
+ throw new SQLFeatureNotSupportedException("updates");
728
+ }
729
+
730
+ public void updateCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
731
+ throw new SQLFeatureNotSupportedException("updates");
732
+ }
733
+
734
+ public void updateAsciiStream(String columnLabel, InputStream x, long length) throws SQLException {
735
+ throw new SQLFeatureNotSupportedException("updates");
736
+ }
737
+
738
+ public void updateBinaryStream(String columnLabel, InputStream x, long length) throws SQLException {
739
+ throw new SQLFeatureNotSupportedException("updates");
740
+ }
741
+
742
+ public void updateCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
743
+ throw new SQLFeatureNotSupportedException("updates");
744
+ }
745
+
746
+ public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException {
747
+ throw new SQLFeatureNotSupportedException("updates");
748
+ }
749
+
750
+ public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
751
+ throw new SQLFeatureNotSupportedException("updates");
752
+ }
753
+
754
+ public void updateClob(int columnIndex, Reader reader, long length) throws SQLException {
755
+ throw new SQLFeatureNotSupportedException("updates");
756
+ }
757
+
758
+ public void updateClob(String columnLabel, Reader reader, long length) throws SQLException {
759
+ throw new SQLFeatureNotSupportedException("updates");
760
+ }
761
+
762
+ public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException {
763
+ throw new SQLFeatureNotSupportedException("updates");
764
+ }
765
+
766
+ public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException {
767
+ throw new SQLFeatureNotSupportedException("updates");
768
+ }
769
+
770
+ public void updateNCharacterStream(int columnIndex, Reader x) throws SQLException {
771
+ throw new SQLFeatureNotSupportedException("updates");
772
+ }
773
+
774
+ public void updateNCharacterStream(String columnLabel, Reader reader) throws SQLException {
775
+ throw new SQLFeatureNotSupportedException("updates");
776
+ }
777
+
778
+ public void updateAsciiStream(int columnIndex, InputStream x) throws SQLException {
779
+ throw new SQLFeatureNotSupportedException("updates");
780
+ }
781
+
782
+ public void updateBinaryStream(int columnIndex, InputStream x) throws SQLException {
783
+ throw new SQLFeatureNotSupportedException("updates");
784
+ }
785
+
786
+ public void updateCharacterStream(int columnIndex, Reader x) throws SQLException {
787
+ throw new SQLFeatureNotSupportedException("updates");
788
+ }
789
+
790
+ public void updateAsciiStream(String columnLabel, InputStream x) throws SQLException {
791
+ throw new SQLFeatureNotSupportedException("updates");
792
+ }
793
+
794
+ public void updateBinaryStream(String columnLabel, InputStream x) throws SQLException {
795
+ throw new SQLFeatureNotSupportedException("updates");
796
+ }
797
+
798
+ public void updateCharacterStream(String columnLabel, Reader reader) throws SQLException {
799
+ throw new SQLFeatureNotSupportedException("updates");
800
+ }
801
+
802
+ public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
803
+ throw new SQLFeatureNotSupportedException("updates");
804
+ }
805
+
806
+ public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
807
+ throw new SQLFeatureNotSupportedException("updates");
808
+ }
809
+
810
+ public void updateClob(int columnIndex, Reader reader) throws SQLException {
811
+ throw new SQLFeatureNotSupportedException("updates");
812
+ }
813
+
814
+ public void updateClob(String columnLabel, Reader reader) throws SQLException {
815
+ throw new SQLFeatureNotSupportedException("updates");
816
+ }
817
+
818
+ public void updateNClob(int columnIndex, Reader reader) throws SQLException {
819
+ throw new SQLFeatureNotSupportedException("updates");
820
+ }
821
+
822
+ public void updateNClob(String columnLabel, Reader reader) throws SQLException {
823
+ throw new SQLFeatureNotSupportedException("updates");
824
+ }
825
+
826
+ }