xborder commented on code in PR #2481:
URL: https://github.com/apache/arrow-adbc/pull/2481#discussion_r1927429985
##########
go/adbc/driver/flightsql/flightsql_adbc_server_test.go:
##########
@@ -2014,72 +2195,114 @@ func (suite *GetObjectsTests)
TestMetadataGetObjectsColumnsXdbc() {
for tblIdx := tblIdxStart; tblIdx <
tblIdxEnd; tblIdx++ {
tableName :=
dbSchemaTables.Field(0).(*array.String).Value(int(tblIdx))
- if
strings.EqualFold(schemaName, suite.Quirks.DBSchema()) &&
strings.EqualFold("bulk_ingest", tableName) {
+ if
strings.EqualFold(schemaName, suite.schemaName) &&
strings.EqualFold(suite.tableName, tableName) {
foundExpected = true
colIdxStart, colIdxEnd
:= tableColumnsList.ValueOffsets(int(tblIdx))
for colIdx :=
colIdxStart; colIdx < colIdxEnd; colIdx++ {
name :=
tableColumns.Field(0).(*array.String).Value(int(colIdx))
- colnames =
append(colnames, strings.ToLower(name))
+ columnName =
append(columnName, name)
- pos :=
tableColumns.Field(1).(*array.Int32).Value(int(colIdx))
- positions =
append(positions, strconv.Itoa(int(pos)))
+ // pos :=
tableColumns.Field(1).(*array.Int32).Value(int(colIdx))
+ //
ordinalPosition = append(ordinalPosition, strconv.Itoa(int(pos)))
- comments =
append(comments, tableColumns.Field(2).(*array.String).Value(int(colIdx)))
+ rm :=
tableColumns.Field(2).(*array.String).Value(int(colIdx))
+ remarks =
append(remarks, name+"_"+rm)
xdt :=
tableColumns.Field(3).(*array.Int16).Value(int(colIdx))
- xdbcDataTypes =
append(xdbcDataTypes, strconv.Itoa(int(xdt)))
+ xdbcDataType =
append(xdbcDataType, name+"_"+strconv.Itoa(int(xdt)))
dataType :=
tableColumns.Field(4).(*array.String).Value(int(colIdx))
- dataTypes =
append(dataTypes, dataType)
- xdbcTypeNames =
append(xdbcTypeNames, dataType)
+ xdbcTypeName =
append(xdbcTypeName, name+"_"+dataType)
- // these are
column size attributes used for either precision for numbers OR the length for
text
-
maxLenOrPrecision := tableColumns.Field(5).(*array.Int32).Value(int(colIdx))
- xdbcCharMaxLens
= append(xdbcCharMaxLens, strconv.Itoa(int(maxLenOrPrecision)))
+ columnSize :=
tableColumns.Field(5).(*array.Int32).Value(int(colIdx))
+ xdbcColumnSize
= append(xdbcColumnSize, name+"_"+strconv.Itoa(int(columnSize)))
- scale :=
tableColumns.Field(6).(*array.Int16).Value(int(colIdx))
- xdbcScales =
append(xdbcScales, strconv.Itoa(int(scale)))
+ decimalDigits
:= tableColumns.Field(6).(*array.Int16).Value(int(colIdx))
+
xdbcDecimalDigits = append(xdbcDecimalDigits,
name+"_"+strconv.Itoa(int(decimalDigits)))
- radix :=
tableColumns.Field(7).(*array.Int16).Value(int(colIdx))
-
xdbcNumPrecRadixs = append(xdbcNumPrecRadixs, strconv.Itoa(int(radix)))
+ numPrecRadix :=
tableColumns.Field(7).(*array.Int16).Value(int(colIdx))
+
xdbcNumPrecRadix = append(xdbcNumPrecRadix,
name+"_"+strconv.Itoa(int(numPrecRadix)))
- isnull :=
tableColumns.Field(8).(*array.Int16).Value(int(colIdx))
- xdbcNullables =
append(xdbcNullables, strconv.Itoa(int(isnull)))
+ nullable :=
tableColumns.Field(8).(*array.Int16).Value(int(colIdx))
+ xdbcNullable =
append(xdbcNullable, name+"_"+strconv.Itoa(int(nullable)))
+
+ columnDef :=
tableColumns.Field(9).(*array.String).Value(int(colIdx))
+ xdbcColumnDef =
append(xdbcColumnDef, name+"_"+columnDef)
sqlType :=
tableColumns.Field(10).(*array.Int16).Value(int(colIdx))
-
xdbcSqlDataTypes = append(xdbcSqlDataTypes, strconv.Itoa(int(sqlType)))
+ xdbcSqlDataType
= append(xdbcSqlDataType, name+"_"+strconv.Itoa(int(sqlType)))
dtPrec :=
tableColumns.Field(11).(*array.Int16).Value(int(colIdx))
- xdbcDateTimeSub
= append(xdbcSqlDataTypes, strconv.Itoa(int(dtPrec)))
+ xdbcDatetimeSub
= append(xdbcDatetimeSub, name+"_"+strconv.Itoa(int(dtPrec)))
charOctetLen :=
tableColumns.Field(12).(*array.Int32).Value(int(colIdx))
-
xdbcCharOctetLen = append(xdbcCharOctetLen, strconv.Itoa(int(charOctetLen)))
+
xdbcCharOctetLength = append(xdbcCharOctetLength,
name+"_"+strconv.Itoa(int(charOctetLen)))
+
+ isNullable :=
tableColumns.Field(13).(*array.String).Value(int(colIdx))
+ xdbcIsNullable
= append(xdbcIsNullable, name+"_"+isNullable)
- xdbcIsNullables
= append(xdbcIsNullables,
tableColumns.Field(13).(*array.String).Value(int(colIdx)))
+ scopeCatalog :=
tableColumns.Field(14).(*array.String).Value(int(colIdx))
+
xdbcScopeCatalog = append(xdbcScopeCatalog, name+"_"+scopeCatalog)
+
+ scopeSchema :=
tableColumns.Field(15).(*array.String).Value(int(colIdx))
+ xdbcScopeSchema
= append(xdbcScopeSchema, name+"_"+scopeSchema)
+
+ scopeTable :=
tableColumns.Field(16).(*array.String).Value(int(colIdx))
+ xdbcScopeTable
= append(xdbcScopeTable, name+"_"+scopeTable)
+
+ isAutoIncrement
:= tableColumns.Field(17).(*array.Boolean).Value(int(colIdx))
+
xdbcIsAutoincrement = append(xdbcIsAutoincrement,
name+"_"+strconv.FormatBool(isAutoIncrement))
+
+ isAutoGenerated
:= tableColumns.Field(18).(*array.Boolean).Value(int(colIdx))
+
xdbcIsAutogeneratedColumn = append(xdbcIsAutogeneratedColumn,
name+"_"+strconv.FormatBool(isAutoGenerated))
}
}
}
}
}
+ sort.Strings(columnName)
+ sort.Strings(remarks)
+ sort.Strings(xdbcDataType)
+ sort.Strings(xdbcTypeName)
+ sort.Strings(xdbcColumnSize)
+ sort.Strings(xdbcDecimalDigits)
+ sort.Strings(xdbcNumPrecRadix)
+ sort.Strings(xdbcNullable)
+ sort.Strings(xdbcColumnDef)
+ sort.Strings(xdbcSqlDataType)
+ sort.Strings(xdbcDatetimeSub)
+ sort.Strings(xdbcCharOctetLength)
+ sort.Strings(xdbcIsNullable)
+ sort.Strings(xdbcScopeCatalog)
+ sort.Strings(xdbcScopeSchema)
+ sort.Strings(xdbcScopeTable)
+ sort.Strings(xdbcIsAutoincrement)
+ sort.Strings(xdbcIsAutogeneratedColumn)
+
suite.False(rdr.Next())
suite.True(foundExpected)
- suite.Equal(tt.colnames, colnames) //
colNames
- suite.Equal(tt.positions, positions) //
positions
- suite.Equal(tt.comments, comments) //
comments
- suite.Equal(tt.xdbcDataType, xdbcDataTypes) //
xdbcDataType
- suite.Equal(tt.dataTypes, dataTypes) //
dataTypes
- suite.Equal(tt.xdbcTypeName, xdbcTypeNames) //
xdbcTypeName
- suite.Equal(tt.xdbcCharMaxLen, xdbcCharMaxLens) //
xdbcCharMaxLen
- suite.Equal(tt.xdbcScale, xdbcScales) //
xdbcScale
- suite.Equal(tt.xdbcNumPrecRadix, xdbcNumPrecRadixs) //
xdbcNumPrecRadix
- suite.Equal(tt.xdbcNullable, xdbcNullables) //
xdbcNullable
- suite.Equal(tt.xdbcSqlDataType, xdbcSqlDataTypes) //
xdbcSqlDataType
- suite.Equal(tt.xdbcDateTimeSub, xdbcDateTimeSub) //
xdbcDateTimeSub
- suite.Equal(tt.xdbcCharOctetLen, xdbcCharOctetLen) //
xdbcCharOctetLen
- suite.Equal(tt.xdbcIsNullable, xdbcIsNullables) //
xdbcIsNullable
+ suite.Equal(tt.columnName, columnName, "columnName")
+ //suite.Equal(tt.ordinalPosition, ordinalPosition,
"ordinalPosition")
Review Comment:
Good question. The ordinal position is set based on the order in which the
columns are processed unless there's a metadata key `ORDINAL_POSITION`.
While writing the test I realized that even tho the schema is built always
in the same order, the deserialization would (sometimes) cause columns to be in
different order. I couldn't exactly understand the issue (if it even is an
issue).
To work around this, I ignored the ordinal position (flight doesn't even set
`ORDINAL_POSITION`) and appended the name of the columns being processed to
every fields
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]