44
55import com .databricks .jdbc .api .IDatabricksResultSet ;
66import com .databricks .jdbc .api .IDatabricksSession ;
7- import com .databricks .jdbc .api .callback .IDatabricksResultSetHandle ;
8- import com .databricks .jdbc .api .callback .IDatabricksStatementHandle ;
97import com .databricks .jdbc .api .impl .converters .ConverterHelper ;
108import com .databricks .jdbc .api .impl .converters .ObjectConverter ;
11- import com .databricks .jdbc .api .impl .volume .VolumeInputStream ;
9+ import com .databricks .jdbc .api .impl .volume .VolumeOperationResult ;
10+ import com .databricks .jdbc .api .internal .IDatabricksResultSetInternal ;
11+ import com .databricks .jdbc .api .internal .IDatabricksStatementInternal ;
1212import com .databricks .jdbc .common .StatementType ;
1313import com .databricks .jdbc .common .util .WarningUtil ;
14+ import com .databricks .jdbc .dbclient .impl .common .StatementId ;
1415import com .databricks .jdbc .exception .DatabricksParsingException ;
1516import com .databricks .jdbc .exception .DatabricksSQLException ;
1617import com .databricks .jdbc .exception .DatabricksSQLFeatureNotSupportedException ;
2526import com .databricks .sdk .service .sql .StatementState ;
2627import com .databricks .sdk .service .sql .StatementStatus ;
2728import com .google .common .annotations .VisibleForTesting ;
28- import java .io .IOException ;
2929import java .io .InputStream ;
3030import java .io .Reader ;
3131import java .math .BigDecimal ;
3636import java .util .List ;
3737import java .util .Map ;
3838import java .util .function .Supplier ;
39- import org .apache .http .HttpEntity ;
4039import org .apache .http .entity .InputStreamEntity ;
4140
4241public class DatabricksResultSet
43- implements ResultSet , IDatabricksResultSet , IDatabricksResultSetHandle {
42+ implements ResultSet , IDatabricksResultSet , IDatabricksResultSetInternal {
4443
4544 private static final JdbcLogger LOGGER = JdbcLoggerFactory .getLogger (DatabricksResultSet .class );
4645 protected static final String AFFECTED_ROWS_COUNT = "num_affected_rows" ;
4746 private final StatementStatus statementStatus ;
48- private final String statementId ;
47+ private final StatementId statementId ;
4948 private final IExecutionResult executionResult ;
5049 private final DatabricksResultSetMetaData resultSetMetaData ;
5150 private final StatementType statementType ;
52- private final IDatabricksStatementHandle parentStatement ;
51+ private final IDatabricksStatementInternal parentStatement ;
5352 private Long updateCount ;
5453 private boolean isClosed ;
5554 private SQLWarning warnings = null ;
5655 private boolean wasNull ;
57- private VolumeInputStream volumeInputStream = null ;
58- private long volumeStreamContentLength = -1L ;
56+ private boolean isResultInitialized = true ;
5957
6058 // Constructor for SEA result set
6159 public DatabricksResultSet (
6260 StatementStatus statementStatus ,
63- String statementId ,
61+ StatementId statementId ,
6462 ResultData resultData ,
6563 ResultManifest resultManifest ,
6664 StatementType statementType ,
6765 IDatabricksSession session ,
68- IDatabricksStatementHandle parentStatement )
66+ IDatabricksStatementInternal parentStatement )
6967 throws DatabricksParsingException {
7068 this .statementStatus = statementStatus ;
7169 this .statementId = statementId ;
72- this .executionResult =
73- ExecutionResultFactory .getResultSet (
74- resultData , resultManifest , statementId , session , parentStatement , this );
75- this .resultSetMetaData = new DatabricksResultSetMetaData (statementId , resultManifest );
70+ if (resultData != null ) {
71+ this .executionResult =
72+ ExecutionResultFactory .getResultSet (
73+ resultData , resultManifest , statementId , session , parentStatement );
74+ this .resultSetMetaData = new DatabricksResultSetMetaData (statementId , resultManifest );
75+ } else {
76+ executionResult = null ;
77+ resultSetMetaData = null ;
78+ isResultInitialized = false ;
79+ }
7680 this .statementType = statementType ;
7781 this .updateCount = null ;
7882 this .parentStatement = parentStatement ;
@@ -83,9 +87,9 @@ public DatabricksResultSet(
8387 @ VisibleForTesting
8488 public DatabricksResultSet (
8589 StatementStatus statementStatus ,
86- String statementId ,
90+ StatementId statementId ,
8791 StatementType statementType ,
88- IDatabricksStatementHandle parentStatement ,
92+ IDatabricksStatementInternal parentStatement ,
8993 IExecutionResult executionResult ,
9094 DatabricksResultSetMetaData resultSetMetaData ) {
9195 this .statementStatus = statementStatus ;
@@ -102,26 +106,39 @@ public DatabricksResultSet(
102106 // Constructor for thrift result set
103107 public DatabricksResultSet (
104108 TStatus statementStatus ,
105- String statementId ,
109+ StatementId statementId ,
106110 TRowSet resultData ,
107111 TGetResultSetMetadataResp resultManifest ,
108112 StatementType statementType ,
109- IDatabricksStatementHandle parentStatement ,
113+ IDatabricksStatementInternal parentStatement ,
110114 IDatabricksSession session )
111115 throws SQLException {
112- if (SUCCESS_STATUS_LIST .contains (statementStatus .getStatusCode ())) {
113- this .statementStatus = new StatementStatus ().setState (StatementState .SUCCEEDED );
114- } else {
115- this .statementStatus = new StatementStatus ().setState (StatementState .FAILED );
116+ switch (statementStatus .getStatusCode ()) {
117+ case SUCCESS_STATUS :
118+ case SUCCESS_WITH_INFO_STATUS :
119+ this .statementStatus = new StatementStatus ().setState (StatementState .SUCCEEDED );
120+ break ;
121+ case STILL_EXECUTING_STATUS :
122+ this .statementStatus = new StatementStatus ().setState (StatementState .RUNNING );
123+ break ;
124+ default :
125+ this .statementStatus = new StatementStatus ().setState (StatementState .FAILED );
116126 }
127+
117128 this .statementId = statementId ;
118- this .executionResult =
119- ExecutionResultFactory .getResultSet (
120- resultData , resultManifest , statementId , session , parentStatement , this );
121- long rowSize = getRowCount (resultData );
122- this .resultSetMetaData =
123- new DatabricksResultSetMetaData (
124- statementId , resultManifest , rowSize , resultData .getResultLinksSize ());
129+ if (resultData != null ) {
130+ this .executionResult =
131+ ExecutionResultFactory .getResultSet (
132+ resultData , resultManifest , statementId , session , parentStatement );
133+ long rowSize = getRowCount (resultData );
134+ this .resultSetMetaData =
135+ new DatabricksResultSetMetaData (
136+ statementId , resultManifest , rowSize , resultData .getResultLinksSize ());
137+ } else {
138+ this .executionResult = null ;
139+ this .resultSetMetaData = null ;
140+ this .isResultInitialized = false ;
141+ }
125142 this .statementType = statementType ;
126143 this .updateCount = null ;
127144 this .parentStatement = parentStatement ;
@@ -132,7 +149,7 @@ public DatabricksResultSet(
132149 // Constructing results for getUDTs, getTypeInfo, getProcedures metadata calls
133150 public DatabricksResultSet (
134151 StatementStatus statementStatus ,
135- String statementId ,
152+ StatementId statementId ,
136153 List <String > columnNames ,
137154 List <String > columnTypeText ,
138155 List <Integer > columnTypes ,
@@ -160,7 +177,7 @@ public DatabricksResultSet(
160177 // Constructing metadata result set in thrift flow
161178 public DatabricksResultSet (
162179 StatementStatus statementStatus ,
163- String statementId ,
180+ StatementId statementId ,
164181 List <String > columnNames ,
165182 List <String > columnTypeText ,
166183 List <Integer > columnTypes ,
@@ -188,7 +205,7 @@ public DatabricksResultSet(
188205 // Constructing metadata result set in SEA flow
189206 public DatabricksResultSet (
190207 StatementStatus statementStatus ,
191- String statementId ,
208+ StatementId statementId ,
192209 List <ColumnMetadata > columnMetadataList ,
193210 List <List <Object >> rows ,
194211 StatementType statementType ) {
@@ -1517,7 +1534,7 @@ public boolean isWrapperFor(Class<?> iface) throws SQLException {
15171534
15181535 @ Override
15191536 public String getStatementId () {
1520- return statementId ;
1537+ return statementId . toString () ;
15211538 }
15221539
15231540 @ Override
@@ -1555,18 +1572,13 @@ public boolean hasUpdateCount() throws SQLException {
15551572 && this .resultSetMetaData .getTotalRows () == 1 ;
15561573 }
15571574
1558- @ Override
1559- public void setVolumeOperationEntityStream (HttpEntity httpEntity )
1560- throws SQLException , IOException {
1561- checkIfClosed ();
1562- this .volumeInputStream = new VolumeInputStream (httpEntity );
1563- this .volumeStreamContentLength = httpEntity .getContentLength ();
1564- }
1565-
15661575 @ Override
15671576 public InputStreamEntity getVolumeOperationInputStream () throws SQLException {
15681577 checkIfClosed ();
1569- return new InputStreamEntity (this .volumeInputStream , this .volumeStreamContentLength );
1578+ if (executionResult instanceof VolumeOperationResult ) {
1579+ return ((VolumeOperationResult ) executionResult ).getVolumeOperationInputStream ();
1580+ }
1581+ throw new DatabricksSQLException ("Invalid volume operation" );
15701582 }
15711583
15721584 private void addWarningAndLog (String warningMessage ) {
0 commit comments