Skip to content

Commit 41fa205

Browse files
Public error types
Refactored so that the interfaces for system, request, and execution errors are public in dbsql/errors. Updated error implementations to work better with errors.Is() and errors.As(). Added sentinel values (SystemFault, RequestError, ExecutionError) in dbsql/errors to use with errors.Is() Updated doc.go to include error information. Updated errors examples. Signed-off-by: Raymond Cypher <[email protected]>
1 parent 34b1480 commit 41fa205

File tree

3 files changed

+18
-22
lines changed

3 files changed

+18
-22
lines changed

internal/errors/err_test.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,6 @@ func TestDbSqlErrors(t *testing.T) {
154154
assert.Equal(t, e, str)
155155
assert.NotEqual(t, cause, str)
156156
})
157-
158-
t.Run("", func(t *testing.T) {
159-
})
160-
161157
}
162158

163159
type boringError struct{}

internal/rows/arrowbased/arrowRows.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
dbsqlerr "github.com/databricks/databricks-sql-go/errors"
1414
"github.com/databricks/databricks-sql-go/internal/cli_service"
1515
"github.com/databricks/databricks-sql-go/internal/config"
16-
dbsqlerr_int "github.com/databricks/databricks-sql-go/internal/errors"
16+
dbsqlerrint "github.com/databricks/databricks-sql-go/internal/errors"
1717
"github.com/databricks/databricks-sql-go/internal/rows/rowscanner"
1818
dbsqllog "github.com/databricks/databricks-sql-go/logger"
1919
"github.com/pkg/errors"
@@ -111,20 +111,20 @@ func NewArrowRowScanner(resultSetMetadata *cli_service.TGetResultSetMetadataResp
111111
arrowSchema, err = tTableSchemaToArrowSchema(resultSetMetadata.Schema, &arrowConfig)
112112
if err != nil {
113113
logger.Err(err).Msg(errArrowRowsConvertSchema)
114-
return nil, dbsqlerr_int.NewDriverError(ctx, errArrowRowsConvertSchema, err)
114+
return nil, dbsqlerrint.NewDriverError(ctx, errArrowRowsConvertSchema, err)
115115
}
116116

117117
// serialize the arrow schema
118118
schemaBytes, err = getArrowSchemaBytes(arrowSchema, ctx)
119119
if err != nil {
120120
logger.Err(err).Msg(errArrowRowsSerializeSchema)
121-
return nil, dbsqlerr_int.NewDriverError(ctx, errArrowRowsSerializeSchema, err)
121+
return nil, dbsqlerrint.NewDriverError(ctx, errArrowRowsSerializeSchema, err)
122122
}
123123
} else {
124124
br := &chunkedByteReader{chunks: [][]byte{schemaBytes}}
125125
rdr, err := ipc.NewReader(br)
126126
if err != nil {
127-
return nil, dbsqlerr_int.NewDriverError(ctx, errArrowRowsUnableToReadBatch, err)
127+
return nil, dbsqlerrint.NewDriverError(ctx, errArrowRowsUnableToReadBatch, err)
128128
}
129129
defer rdr.Release()
130130

@@ -144,7 +144,7 @@ func NewArrowRowScanner(resultSetMetadata *cli_service.TGetResultSetMetadataResp
144144
ttsf, err := arrow.FixedWidthTypes.Timestamp_us.(*arrow.TimestampType).GetToTimeFunc()
145145
if err != nil {
146146
logger.Err(err).Msg(errArrowRowsToTimestampFn)
147-
return nil, dbsqlerr_int.NewDriverError(ctx, errArrowRowsToTimestampFn, err)
147+
return nil, dbsqlerrint.NewDriverError(ctx, errArrowRowsToTimestampFn, err)
148148
}
149149

150150
arrowBatches := make([]sparkArrowBatch, len(rowSet.ArrowBatches))
@@ -255,14 +255,14 @@ func (ars *arrowRowScanner) ScanRow(
255255
(isIntervalType(dbType) && ars.UseArrowNativeIntervalTypes) {
256256
// not yet fully supported
257257
ars.Error().Msgf(errArrowRowsUnsupportedNativeType(dbType.String()))
258-
return dbsqlerr_int.NewDriverError(ars.ctx, errArrowRowsUnsupportedNativeType(dbType.String()), nil)
258+
return dbsqlerrint.NewDriverError(ars.ctx, errArrowRowsUnsupportedNativeType(dbType.String()), nil)
259259
}
260260

261261
// get the value from the column values holder
262262
var err1 error
263263
destination[i], err1 = ars.columnValues[i].Value(rowInBatchIndex)
264264
if err1 != nil {
265-
err = dbsqlerr_int.NewDriverError(ars.ctx, errArrowRowsColumnValue(col.name), err1)
265+
err = dbsqlerrint.NewDriverError(ars.ctx, errArrowRowsColumnValue(col.name), err1)
266266
}
267267
}
268268
}
@@ -317,9 +317,9 @@ func (ars *arrowRowScanner) loadBatch(batchIndex int) dbsqlerr.DBError {
317317
if ars == nil || ars.arrowBatches == nil {
318318
if ars != nil {
319319
ars.Error().Msg(errArrowRowsNoArrowBatches)
320-
return dbsqlerr_int.NewDriverError(ars.ctx, errArrowRowsNoArrowBatches, nil)
320+
return dbsqlerrint.NewDriverError(ars.ctx, errArrowRowsNoArrowBatches, nil)
321321
}
322-
return dbsqlerr_int.NewDriverError(context.Background(), errArrowRowsNoArrowBatches, nil)
322+
return dbsqlerrint.NewDriverError(context.Background(), errArrowRowsNoArrowBatches, nil)
323323
}
324324

325325
// if the batch already loaded we can just return
@@ -329,21 +329,21 @@ func (ars *arrowRowScanner) loadBatch(batchIndex int) dbsqlerr.DBError {
329329

330330
if batchIndex < 0 || batchIndex >= len(ars.arrowBatches) {
331331
ars.Error().Msg(errArrowRowsInvalidBatchIndex(batchIndex, len(ars.arrowBatches)))
332-
return dbsqlerr_int.NewDriverError(ars.ctx, errArrowRowsInvalidBatchIndex(batchIndex, len(ars.arrowBatches)), nil)
332+
return dbsqlerrint.NewDriverError(ars.ctx, errArrowRowsInvalidBatchIndex(batchIndex, len(ars.arrowBatches)), nil)
333333
}
334334

335335
// set up the column values containers
336336
if ars.columnValues == nil {
337337
err := ars.makeColumnValuesContainers(ars)
338338
if err != nil {
339-
return dbsqlerr_int.NewDriverError(ars.ctx, errArrowRowsMakeColumnValueContainers, err)
339+
return dbsqlerrint.NewDriverError(ars.ctx, errArrowRowsMakeColumnValueContainers, err)
340340
}
341341
}
342342

343343
r, err := ars.NewRecordFromBytes(ars.arrowSchemaBytes, ars.arrowBatches[batchIndex])
344344
if err != nil {
345345
ars.Err(err).Msg(errArrowRowsUnableToReadBatch)
346-
return dbsqlerr_int.NewDriverError(ars.ctx, errArrowRowsUnableToReadBatch, err)
346+
return dbsqlerrint.NewDriverError(ars.ctx, errArrowRowsUnableToReadBatch, err)
347347
}
348348

349349
defer r.Release()
@@ -376,14 +376,14 @@ func (ars *arrowRowScanner) loadBatch(batchIndex int) dbsqlerr.DBError {
376376
// getArrowSchemaBytes returns the serialized schema in ipc format
377377
func getArrowSchemaBytes(schema *arrow.Schema, ctx context.Context) ([]byte, dbsqlerr.DBError) {
378378
if schema == nil {
379-
return nil, dbsqlerr_int.NewDriverError(ctx, errArrowRowsNilArrowSchema, nil)
379+
return nil, dbsqlerrint.NewDriverError(ctx, errArrowRowsNilArrowSchema, nil)
380380
}
381381

382382
var output bytes.Buffer
383383
w := ipc.NewWriter(&output, ipc.WithSchema(schema))
384384
err := w.Close()
385385
if err != nil {
386-
return nil, dbsqlerr_int.NewDriverError(ctx, errArrowRowsUnableToWriteArrowSchema, err)
386+
return nil, dbsqlerrint.NewDriverError(ctx, errArrowRowsUnableToWriteArrowSchema, err)
387387
}
388388

389389
arrowSchemaBytes := output.Bytes()
@@ -405,7 +405,7 @@ func (ars *arrowRowScanner) rowIndexToBatchIndex(rowIndex int64) (int, dbsqlerr.
405405
}
406406

407407
ars.Error().Msg(errArrowRowsInvalidRowIndex(rowIndex))
408-
return -1, dbsqlerr_int.NewDriverError(ars.ctx, errArrowRowsInvalidRowIndex(rowIndex), nil)
408+
return -1, dbsqlerrint.NewDriverError(ars.ctx, errArrowRowsInvalidRowIndex(rowIndex), nil)
409409
}
410410

411411
// tTableSchemaToArrowSchema convers the TTableSchema retrieved by the thrift server into an arrow.Schema instance
@@ -477,7 +477,7 @@ func tColumnDescToArrowDataType(tColumnDesc *cli_service.TColumnDesc, arrowConfi
477477

478478
decimalType, err := arrow.NewDecimalType(arrow.DECIMAL128, precision, scale)
479479
if err != nil {
480-
return nil, dbsqlerr_int.WrapErr(err, errArrowRowsUnableToCreateDecimalType(scale, precision))
480+
return nil, dbsqlerrint.WrapErr(err, errArrowRowsUnableToCreateDecimalType(scale, precision))
481481
}
482482

483483
return decimalType, nil

internal/rows/rowscanner/rowScanner.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77

88
dbsqlerr "github.com/databricks/databricks-sql-go/errors"
99
"github.com/databricks/databricks-sql-go/internal/cli_service"
10-
dbsqlerr_int "github.com/databricks/databricks-sql-go/internal/errors"
10+
dbsqlerrint "github.com/databricks/databricks-sql-go/internal/errors"
1111
)
1212

1313
// RowScanner is an interface defining the behaviours that are specific to
@@ -54,7 +54,7 @@ func HandleDateTime(val any, dbType, columnName string, location *time.Location)
5454
if format, ok := DateTimeFormats[dbType]; ok {
5555
result, err = parseInLocation(format, val.(string), location)
5656
if err != nil {
57-
err = dbsqlerr_int.WrapErrf(err, ErrRowsParseValue, dbType, val, columnName)
57+
err = dbsqlerrint.WrapErrf(err, ErrRowsParseValue, dbType, val, columnName)
5858
}
5959
}
6060

0 commit comments

Comments
 (0)