Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5295fff

Browse files
author
Barry Lind
committed
Patch to fix up LONGVARBINARY support submitted by Amit Gollapudi
(agollapudi@demandsolutions.com).Also applied the RefCursor support patch by Nic Ferrier. This patch allowsyou too return a get a result set from a function that returns a refcursor.For example:call.registerOutParameter(1, Types.OTHER);call.execute();ResultSet rs = (ResultSet) call.getObject(1);Modified Files: jdbc/org/postgresql/core/BaseStatement.java jdbc/org/postgresql/jdbc1/AbstractJdbc1ResultSet.java jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java jdbc/org/postgresql/jdbc1/Jdbc1CallableStatement.java jdbc/org/postgresql/jdbc1/Jdbc1PreparedStatement.java jdbc/org/postgresql/jdbc1/Jdbc1Statement.java jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java jdbc/org/postgresql/jdbc2/Jdbc2CallableStatement.java jdbc/org/postgresql/jdbc2/Jdbc2PreparedStatement.java jdbc/org/postgresql/jdbc2/Jdbc2Statement.java jdbc/org/postgresql/jdbc3/Jdbc3CallableStatement.java jdbc/org/postgresql/jdbc3/Jdbc3PreparedStatement.java jdbc/org/postgresql/jdbc3/Jdbc3Statement.java Added Files: jdbc/org/postgresql/PGRefCursorResultSet.java jdbc/org/postgresql/jdbc1/Jdbc1RefCursorResultSet.java jdbc/org/postgresql/jdbc2/Jdbc2RefCursorResultSet.java jdbc/org/postgresql/jdbc3/Jdbc3RefCursorResultSet.java jdbc/org/postgresql/test/jdbc2/RefCursorTest.java
1 parent721996d commit5295fff

18 files changed

+340
-11
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*-------------------------------------------------------------------------
2+
*
3+
* PGRefCursorResultSet.java
4+
* Describes a PLPGSQL refcursor type.
5+
*
6+
* Copyright (c) 2003, PostgreSQL Global Development Group
7+
*
8+
* IDENTIFICATION
9+
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/Attic/PGRefCursorResultSet.java,v 1.1 2003/05/03 20:40:45 barry Exp $
10+
*
11+
*-------------------------------------------------------------------------
12+
*/
13+
packageorg.postgresql;
14+
15+
16+
/** A ref cursor based result set.
17+
*/
18+
publicinterfacePGRefCursorResultSet
19+
{
20+
21+
/** return the name of the cursor.
22+
*/
23+
publicStringgetRefCursor ();
24+
25+
}

‎src/interfaces/jdbc/org/postgresql/core/BaseStatement.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,20 @@
66
* Copyright (c) 2003, PostgreSQL Global Development Group
77
*
88
* IDENTIFICATION
9-
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/core/Attic/BaseStatement.java,v 1.1 2003/03/07 18:39:41 barry Exp $
9+
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/core/Attic/BaseStatement.java,v 1.2 2003/05/03 20:40:45 barry Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
1313
packageorg.postgresql.core;
1414

15-
15+
importorg.postgresql.PGRefCursorResultSet;
1616
importjava.sql.*;
1717
importjava.util.Vector;
1818

1919
publicinterfaceBaseStatementextendsorg.postgresql.PGStatement
2020
{
21-
publicBaseResultSetcreateResultSet(Field[]fields,Vectortuples,Stringstatus,intupdateCount,longinsertOID,booleanbinaryCursor)throwsSQLException;
21+
publicBaseResultSetcreateResultSet(Field[]fields,Vectortuples,Stringstatus,intupdateCount,longinsertOID,booleanbinaryCursor)throwsSQLException;
22+
publicPGRefCursorResultSetcreateRefCursorResultSet(StringcursorName)throwsSQLException;
2223

2324
publicBaseConnectiongetPGConnection();
2425

‎src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1ResultSet.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* Copyright (c) 2003, PostgreSQL Global Development Group
1010
*
1111
* IDENTIFICATION
12-
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1ResultSet.java,v 1.11 2003/03/08 06:06:55 barry Exp $
12+
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1ResultSet.java,v 1.12 2003/05/03 20:40:45 barry Exp $
1313
*
1414
*-------------------------------------------------------------------------
1515
*/
@@ -575,11 +575,18 @@ public Object getObject(int columnIndex) throws SQLException
575575
returngetBytes(columnIndex);
576576
default:
577577
Stringtype =field.getPGType();
578+
578579
// if the backend doesn't know the type then coerce to String
579580
if (type.equals("unknown"))
580581
{
581582
returngetString(columnIndex);
582583
}
584+
// Specialized support for ref cursors is neater.
585+
elseif (type.equals("refcursor"))
586+
{
587+
StringcursorName =getString(columnIndex);
588+
returnstatement.createRefCursorResultSet(cursorName);
589+
}
583590
else
584591
{
585592
returnconnection.getObject(field.getPGType(),getString(columnIndex));

‎src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
importorg.postgresql.largeobject.*;
1414
importorg.postgresql.util.*;
1515

16-
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.20 2003/04/17 04:37:07 barry Exp $
16+
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.21 2003/05/03 20:40:45 barry Exp $
1717
* This class defines methods of the jdbc1 specification. This class is
1818
* extended by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2
1919
* methods. The real Statement class (for jdbc1) is org.postgresql.jdbc1.Jdbc1Statement
@@ -871,6 +871,7 @@ public void setNull(int parameterIndex, int sqlType) throws SQLException
871871
break;
872872
caseTypes.BINARY:
873873
caseTypes.VARBINARY:
874+
caseTypes.LONGVARBINARY:
874875
l_pgType =PG_BYTEA;
875876
break;
876877
caseTypes.OTHER:
@@ -1490,6 +1491,7 @@ public void setObject(int parameterIndex, Object x, int targetSqlType, int scale
14901491
break;
14911492
caseTypes.BINARY:
14921493
caseTypes.VARBINARY:
1494+
caseTypes.LONGVARBINARY:
14931495
setObject(parameterIndex,x);
14941496
break;
14951497
caseTypes.OTHER:

‎src/interfaces/jdbc/org/postgresql/jdbc1/Jdbc1CallableStatement.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
importjava.sql.*;
55
importjava.util.Vector;
6+
importorg.postgresql.PGRefCursorResultSet;
67
importorg.postgresql.core.BaseResultSet;
78
importorg.postgresql.core.Field;
89

@@ -18,5 +19,10 @@ public BaseResultSet createResultSet (Field[] fields, java.util.Vector tuples, S
1819
{
1920
returnnewJdbc1ResultSet(this,fields,tuples,status,updateCount,insertOID,binaryCursor);
2021
}
22+
23+
publicPGRefCursorResultSetcreateRefCursorResultSet (StringcursorName)throwsSQLException
24+
{
25+
returnnewJdbc1RefCursorResultSet(this,cursorName);
26+
}
2127
}
2228

‎src/interfaces/jdbc/org/postgresql/jdbc1/Jdbc1PreparedStatement.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33

44
importjava.sql.*;
5+
importorg.postgresql.PGRefCursorResultSet;
56
importorg.postgresql.core.BaseResultSet;
67
importorg.postgresql.core.Field;
78

@@ -17,4 +18,9 @@ public BaseResultSet createResultSet (Field[] fields, java.util.Vector tuples, S
1718
{
1819
returnnewJdbc1ResultSet(this,fields,tuples,status,updateCount,insertOID,binaryCursor);
1920
}
21+
22+
publicPGRefCursorResultSetcreateRefCursorResultSet (StringcursorName)throwsSQLException
23+
{
24+
returnnewJdbc1RefCursorResultSet(this,cursorName);
25+
}
2026
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
packageorg.postgresql.jdbc1;
2+
3+
importjava.sql.SQLException;
4+
importorg.postgresql.core.QueryExecutor;
5+
importorg.postgresql.core.BaseStatement;
6+
importorg.postgresql.PGRefCursorResultSet;
7+
8+
/** A real result set based on a ref cursor.
9+
*
10+
* @author Nic Ferrier <nferrier@tapsellferrier.co.uk>
11+
*/
12+
publicclassJdbc1RefCursorResultSetextendsJdbc1ResultSet
13+
implementsPGRefCursorResultSet
14+
{
15+
16+
// The name of the cursor being used.
17+
StringrefCursorHandle;
18+
19+
// Indicates when the result set has activaly bound to the cursor.
20+
booleanisInitialized =false;
21+
22+
23+
Jdbc1RefCursorResultSet(BaseStatementstatement,StringrefCursorName)
24+
{
25+
super(statement,null,null,null, -1,0L,false);
26+
this.refCursorHandle =refCursorName;
27+
}
28+
29+
publicStringgetRefCursor ()
30+
{
31+
returnrefCursorHandle;
32+
}
33+
34+
publicbooleannext ()throwsSQLException
35+
{
36+
if (isInitialized)
37+
returnsuper.next();
38+
// Initialize this res set with the rows from the cursor.
39+
String[]toExec = {"FETCH ALL IN\"" +refCursorHandle +"\";" };
40+
QueryExecutor.execute(toExec,newString[0],this);
41+
isInitialized =true;
42+
returnsuper.next();
43+
}
44+
}

‎src/interfaces/jdbc/org/postgresql/jdbc1/Jdbc1Statement.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33

44
importjava.sql.*;
55
importjava.util.Vector;
6+
importorg.postgresql.PGRefCursorResultSet;
67
importorg.postgresql.core.BaseResultSet;
78
importorg.postgresql.core.Field;
89

9-
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/Jdbc1Statement.java,v 1.5 2003/03/07 18:39:44 barry Exp $
10+
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/Jdbc1Statement.java,v 1.6 2003/05/03 20:40:45 barry Exp $
1011
* This class implements the java.sql.Statement interface for JDBC1.
1112
* However most of the implementation is really done in
1213
* org.postgresql.jdbc1.AbstractJdbc1Statement
@@ -23,4 +24,9 @@ public BaseResultSet createResultSet (Field[] fields, Vector tuples, String stat
2324
{
2425
returnnewJdbc1ResultSet(this,fields,tuples,status,updateCount,insertOID,binaryCursor);
2526
}
27+
28+
publicPGRefCursorResultSetcreateRefCursorResultSet (StringcursorName)throwsSQLException
29+
{
30+
returnnewJdbc1RefCursorResultSet(this,cursorName);
31+
}
2632
}

‎src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* Copyright (c) 2003, PostgreSQL Global Development Group
1010
*
1111
* IDENTIFICATION
12-
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2ResultSet.java,v 1.18 2003/03/25 02:24:07 davec Exp $
12+
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2ResultSet.java,v 1.19 2003/05/03 20:40:45 barry Exp $
1313
*
1414
*-------------------------------------------------------------------------
1515
*/
@@ -148,11 +148,18 @@ public Object getObject(int columnIndex) throws SQLException
148148

149149
default:
150150
Stringtype =field.getPGType();
151+
151152
// if the backend doesn't know the type then coerce to String
152153
if (type.equals("unknown"))
153154
{
154155
returngetString(columnIndex);
155156
}
157+
// Specialized support for ref cursors is neater.
158+
elseif (type.equals("refcursor"))
159+
{
160+
StringcursorName =getString(columnIndex);
161+
returnstatement.createRefCursorResultSet(cursorName);
162+
}
156163
else
157164
{
158165
returnconnection.getObject(field.getPGType(),getString(columnIndex));

‎src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2CallableStatement.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
importjava.sql.*;
55
importjava.util.Vector;
6+
importorg.postgresql.PGRefCursorResultSet;
67
importorg.postgresql.core.BaseResultSet;
78
importorg.postgresql.core.Field;
89

@@ -18,5 +19,10 @@ public BaseResultSet createResultSet (Field[] fields, Vector tuples, String stat
1819
{
1920
returnnewJdbc2ResultSet(this,fields,tuples,status,updateCount,insertOID,binaryCursor);
2021
}
22+
23+
publicPGRefCursorResultSetcreateRefCursorResultSet (StringcursorName)throwsSQLException
24+
{
25+
returnnewJdbc2RefCursorResultSet(this,cursorName);
26+
}
2127
}
2228

‎src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2PreparedStatement.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
importjava.sql.*;
55
importjava.util.Vector;
6+
importorg.postgresql.PGRefCursorResultSet;
67
importorg.postgresql.core.BaseResultSet;
78
importorg.postgresql.core.Field;
89

@@ -18,5 +19,11 @@ public BaseResultSet createResultSet (Field[] fields, Vector tuples, String stat
1819
{
1920
returnnewJdbc2ResultSet(this,fields,tuples,status,updateCount,insertOID,binaryCursor);
2021
}
22+
23+
24+
publicPGRefCursorResultSetcreateRefCursorResultSet (StringcursorName)throwsSQLException
25+
{
26+
returnnewJdbc2RefCursorResultSet(this,cursorName);
27+
}
2128
}
2229

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
packageorg.postgresql.jdbc2;
2+
3+
4+
importorg.postgresql.core.QueryExecutor;
5+
importorg.postgresql.core.BaseStatement;
6+
importorg.postgresql.PGRefCursorResultSet;
7+
8+
9+
/** A real result set based on a ref cursor.
10+
*
11+
* @author Nic Ferrier <nferrier@tapsellferrier.co.uk>
12+
*/
13+
publicclassJdbc2RefCursorResultSetextendsJdbc2ResultSet
14+
implementsPGRefCursorResultSet
15+
{
16+
17+
StringrefCursorHandle;
18+
19+
// Indicates when the result set has activaly bound to the cursor.
20+
booleanisInitialized =false;
21+
22+
Jdbc2RefCursorResultSet(BaseStatementstatement,StringrefCursorName)throwsjava.sql.SQLException
23+
{
24+
super(statement,null,null,null, -1,0L,false);
25+
this.refCursorHandle =refCursorName;
26+
}
27+
28+
publicStringgetRefCursor ()
29+
{
30+
returnrefCursorHandle;
31+
}
32+
33+
publicbooleannext ()throwsjava.sql.SQLException
34+
{
35+
if (isInitialized)
36+
returnsuper.next();
37+
// Initialize this res set with the rows from the cursor.
38+
String[]toExec = {"FETCH ALL IN\"" +refCursorHandle +"\";" };
39+
QueryExecutor.execute(toExec,newString[0],this);
40+
isInitialized =true;
41+
returnsuper.next();
42+
}
43+
}

‎src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2Statement.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33

44
importjava.sql.*;
55
importjava.util.Vector;
6+
importorg.postgresql.PGRefCursorResultSet;
67
importorg.postgresql.core.BaseResultSet;
78
importorg.postgresql.core.Field;
89

9-
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/Jdbc2Statement.java,v 1.5 2003/03/07 18:39:45 barry Exp $
10+
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/Jdbc2Statement.java,v 1.6 2003/05/03 20:40:45 barry Exp $
1011
* This class implements the java.sql.Statement interface for JDBC2.
1112
* However most of the implementation is really done in
1213
* org.postgresql.jdbc2.AbstractJdbc2Statement or one of it's parents
@@ -23,4 +24,9 @@ public BaseResultSet createResultSet (Field[] fields, Vector tuples, String stat
2324
{
2425
returnnewJdbc2ResultSet(this,fields,tuples,status,updateCount,insertOID,binaryCursor);
2526
}
27+
28+
publicPGRefCursorResultSetcreateRefCursorResultSet (StringcursorName)throwsSQLException
29+
{
30+
returnnewJdbc2RefCursorResultSet(this,cursorName);
31+
}
2632
}

‎src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3CallableStatement.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
importjava.sql.*;
55
importjava.util.Vector;
6+
importorg.postgresql.PGRefCursorResultSet;
67
importorg.postgresql.core.BaseResultSet;
78
importorg.postgresql.core.Field;
89

@@ -19,5 +20,9 @@ public BaseResultSet createResultSet (Field[] fields, Vector tuples, String stat
1920
returnnewJdbc3ResultSet(this,fields,tuples,status,updateCount,insertOID,binaryCursor);
2021
}
2122

23+
publicPGRefCursorResultSetcreateRefCursorResultSet (StringcursorName)throwsSQLException
24+
{
25+
returnnewJdbc3RefCursorResultSet(this,cursorName);
26+
}
2227
}
2328

‎src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3PreparedStatement.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33

44
importjava.sql.*;
5+
importorg.postgresql.PGRefCursorResultSet;
56
importorg.postgresql.core.BaseResultSet;
7+
importorg.postgresql.core.BaseStatement;
68
importorg.postgresql.core.Field;
79

810
publicclassJdbc3PreparedStatementextendsorg.postgresql.jdbc3.AbstractJdbc3Statementimplementsjava.sql.PreparedStatement
@@ -15,8 +17,12 @@ public Jdbc3PreparedStatement(Jdbc3Connection connection, String sql) throws SQL
1517

1618
publicBaseResultSetcreateResultSet (Field[]fields,java.util.Vectortuples,Stringstatus,intupdateCount,longinsertOID,booleanbinaryCursor)throwsSQLException
1719
{
18-
returnnewJdbc3ResultSet(this,fields,tuples,status,updateCount,insertOID,binaryCursor);
20+
returnnewJdbc3ResultSet((BaseStatement)this,fields,tuples,status,updateCount,insertOID,binaryCursor);
21+
}
22+
23+
publicPGRefCursorResultSetcreateRefCursorResultSet (StringcursorName)throwsSQLException
24+
{
25+
returnnewJdbc3RefCursorResultSet(this,cursorName);
1926
}
20-
2127
}
2228

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp