@@ -1317,152 +1317,29 @@ public override IArrowArrayStream GetInfo(IReadOnlyList<AdbcInfoCode> codes)
13171317 {
13181318 return this . TraceActivity ( activity =>
13191319 {
1320- const int strValTypeID = 0 ;
1321- const int boolValTypeId = 1 ;
1322-
1323- UnionType infoUnionType = new UnionType (
1324- new Field [ ]
1325- {
1326- new Field ( "string_value" , StringType . Default , true ) ,
1327- new Field ( "bool_value" , BooleanType . Default , true ) ,
1328- new Field ( "int64_value" , Int64Type . Default , true ) ,
1329- new Field ( "int32_bitmask" , Int32Type . Default , true ) ,
1330- new Field (
1331- "string_list" ,
1332- new ListType (
1333- new Field ( "item" , StringType . Default , true )
1334- ) ,
1335- false
1336- ) ,
1337- new Field (
1338- "int32_to_int32_list_map" ,
1339- new ListType (
1340- new Field ( "entries" , new StructType (
1341- new Field [ ]
1342- {
1343- new Field ( "key" , Int32Type . Default , false ) ,
1344- new Field ( "value" , Int32Type . Default , true ) ,
1345- }
1346- ) , false )
1347- ) ,
1348- true
1349- )
1350- } ,
1351- new int [ ] { 0 , 1 , 2 , 3 , 4 , 5 } ,
1352- UnionMode . Dense ) ;
1353-
13541320 if ( codes . Count == 0 )
1355- {
13561321 codes = infoSupportedCodes ;
1357- }
1358-
1359- UInt32Array . Builder infoNameBuilder = new UInt32Array . Builder ( ) ;
1360- ArrowBuffer . Builder < byte > typeBuilder = new ArrowBuffer . Builder < byte > ( ) ;
1361- ArrowBuffer . Builder < int > offsetBuilder = new ArrowBuffer . Builder < int > ( ) ;
1362- StringArray . Builder stringInfoBuilder = new StringArray . Builder ( ) ;
1363- BooleanArray . Builder booleanInfoBuilder = new BooleanArray . Builder ( ) ;
13641322
1365- int nullCount = 0 ;
1366- int arrayLength = codes . Count ;
1367- int offset = 0 ;
1368-
1369- foreach ( AdbcInfoCode code in codes )
1323+ var values = new Dictionary < AdbcInfoCode , object > ( ) ;
1324+ foreach ( var code in codes )
13701325 {
1371- string tagKey = SemanticConventions . Db . Operation . Parameter ( code . ToString ( ) . ToLowerInvariant ( ) ) ;
1372- Func < object ? > tagValue = ( ) => null ;
1373- switch ( code )
1326+ object ? val = code switch
13741327 {
1375- case AdbcInfoCode . DriverName :
1376- infoNameBuilder . Append ( ( uint ) code ) ;
1377- typeBuilder . Append ( strValTypeID ) ;
1378- offsetBuilder . Append ( offset ++ ) ;
1379- stringInfoBuilder . Append ( InfoDriverName ) ;
1380- booleanInfoBuilder . AppendNull ( ) ;
1381- tagValue = ( ) => InfoDriverName ;
1382- break ;
1383- case AdbcInfoCode . DriverVersion :
1384- infoNameBuilder . Append ( ( uint ) code ) ;
1385- typeBuilder . Append ( strValTypeID ) ;
1386- offsetBuilder . Append ( offset ++ ) ;
1387- stringInfoBuilder . Append ( ProductVersion ) ;
1388- booleanInfoBuilder . AppendNull ( ) ;
1389- tagValue = ( ) => ProductVersion ;
1390- break ;
1391- case AdbcInfoCode . DriverArrowVersion :
1392- infoNameBuilder . Append ( ( uint ) code ) ;
1393- typeBuilder . Append ( strValTypeID ) ;
1394- offsetBuilder . Append ( offset ++ ) ;
1395- stringInfoBuilder . Append ( InfoDriverArrowVersion ) ;
1396- booleanInfoBuilder . AppendNull ( ) ;
1397- tagValue = ( ) => InfoDriverArrowVersion ;
1398- break ;
1399- case AdbcInfoCode . VendorName :
1400- infoNameBuilder . Append ( ( uint ) code ) ;
1401- typeBuilder . Append ( strValTypeID ) ;
1402- offsetBuilder . Append ( offset ++ ) ;
1403- string vendorName = VendorName ;
1404- stringInfoBuilder . Append ( vendorName ) ;
1405- booleanInfoBuilder . AppendNull ( ) ;
1406- tagValue = ( ) => vendorName ;
1407- break ;
1408- case AdbcInfoCode . VendorVersion :
1409- infoNameBuilder . Append ( ( uint ) code ) ;
1410- typeBuilder . Append ( strValTypeID ) ;
1411- offsetBuilder . Append ( offset ++ ) ;
1412- string ? vendorVersion = VendorVersion ;
1413- stringInfoBuilder . Append ( vendorVersion ) ;
1414- booleanInfoBuilder . AppendNull ( ) ;
1415- tagValue = ( ) => vendorVersion ;
1416- break ;
1417- case AdbcInfoCode . VendorSql :
1418- infoNameBuilder . Append ( ( uint ) code ) ;
1419- typeBuilder . Append ( boolValTypeId ) ;
1420- offsetBuilder . Append ( offset ++ ) ;
1421- stringInfoBuilder . AppendNull ( ) ;
1422- booleanInfoBuilder . Append ( InfoVendorSql ) ;
1423- tagValue = ( ) => InfoVendorSql ;
1424- break ;
1425- default :
1426- infoNameBuilder . Append ( ( uint ) code ) ;
1427- typeBuilder . Append ( strValTypeID ) ;
1428- offsetBuilder . Append ( offset ++ ) ;
1429- stringInfoBuilder . AppendNull ( ) ;
1430- booleanInfoBuilder . AppendNull ( ) ;
1431- nullCount ++ ;
1432- break ;
1433- }
1434- ActivityExtensions . AddTag ( activity , tagKey , tagValue ) ;
1435- }
1436-
1437- StructType entryType = new StructType (
1438- new Field [ ] {
1439- new Field ( "key" , Int32Type . Default , false ) ,
1440- new Field ( "value" , Int32Type . Default , true ) } ) ;
1441-
1442- StructArray entriesDataArray = new StructArray ( entryType , 0 ,
1443- new [ ] { new Int32Array . Builder ( ) . Build ( ) , new Int32Array . Builder ( ) . Build ( ) } ,
1444- new ArrowBuffer . BitmapBuilder ( ) . Build ( ) ) ;
1445-
1446- IArrowArray [ ] childrenArrays = new IArrowArray [ ]
1447- {
1448- stringInfoBuilder . Build ( ) ,
1449- booleanInfoBuilder . Build ( ) ,
1450- new Int64Array . Builder ( ) . Build ( ) ,
1451- new Int32Array . Builder ( ) . Build ( ) ,
1452- new ListArray . Builder ( StringType . Default ) . Build ( ) ,
1453- new List < IArrowArray ? > ( ) { entriesDataArray } . BuildListArrayForType ( entryType )
1454- } ;
1455-
1456- DenseUnionArray infoValue = new DenseUnionArray ( infoUnionType , arrayLength , childrenArrays , typeBuilder . Build ( ) , offsetBuilder . Build ( ) , nullCount ) ;
1328+ AdbcInfoCode . DriverName => InfoDriverName ,
1329+ AdbcInfoCode . DriverVersion => ProductVersion ,
1330+ AdbcInfoCode . DriverArrowVersion => InfoDriverArrowVersion ,
1331+ AdbcInfoCode . VendorName => VendorName ,
1332+ AdbcInfoCode . VendorVersion => VendorVersion ?? "" ,
1333+ AdbcInfoCode . VendorSql => InfoVendorSql ,
1334+ _ => null
1335+ } ;
1336+ if ( val != null ) values [ code ] = val ;
14571337
1458- IArrowArray [ ] dataArrays = new IArrowArray [ ]
1459- {
1460- infoNameBuilder . Build ( ) ,
1461- infoValue
1462- } ;
1463- StandardSchemas . GetInfoSchema . Validate ( dataArrays ) ;
1338+ string tagKey = SemanticConventions . Db . Operation . Parameter ( code . ToString ( ) . ToLowerInvariant ( ) ) ;
1339+ ActivityExtensions . AddTag ( activity , tagKey , ( ) => val ) ;
1340+ }
14641341
1465- return new HiveInfoArrowStream ( StandardSchemas . GetInfoSchema , dataArrays ) ;
1342+ return MetadataSchemaFactory . BuildGetInfoResult ( codes , values ) ;
14661343 } , ClassName + "." + nameof ( GetInfo ) ) ;
14671344 }
14681345
0 commit comments