CurtHagenlocher commented on code in PR #1356:
URL: https://github.com/apache/arrow-adbc/pull/1356#discussion_r1445397917


##########
csharp/src/Drivers/BigQuery/BigQueryConnection.cs:
##########
@@ -607,17 +608,24 @@ public override IArrowArrayStream 
GetInfo(List<AdbcInfoCode> codes)
             ArrowBuffer.BitmapBuilder nullBitmapBuffer = new 
ArrowBuffer.BitmapBuilder();
             int length = 0;
 
-            string query = string.Format("SELECT * FROM 
`{0}`.`{1}`.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE table_name = '{2}' 
AND constraint_name = '{3}'",
-               Sanitize(catalog), Sanitize(dbSchema), Sanitize(table), 
Sanitize(constraintName));
+            // table_name = '{2}' AND

Review Comment:
   These are commented-out because they might be re-enabled at some point e.g. 
when some other problem is fixed? If so, consider leaving an explanatory 
comment.



##########
csharp/src/Drivers/BigQuery/BigQueryConnection.cs:
##########
@@ -683,8 +691,40 @@ private XdbcDataType ToXdbcDataType(string type)
                     return XdbcDataType.XdbcDataType_XDBC_VARBINARY;
                 case "NUMERIC" or "DECIMAL" or "BIGNUMERIC" or "BIGDECIMAL":
                     return XdbcDataType.XdbcDataType_XDBC_NUMERIC;
-
                 default:
+
+                    int decimalMaxScale = 28;

Review Comment:
   Is the "28" due to limitations of CLR decimal? How does this code relate to 
the use of SqlDecimal?



##########
csharp/src/Drivers/BigQuery/BigQueryStatement.cs:
##########
@@ -107,46 +107,54 @@ private IArrowType TranslateType(TableFieldSchema field)
             switch (field.Type)
             {
                 case "INTEGER" or "INT64":
-                    return Int64Type.Default;
+                    return GetType(field, Int64Type.Default);
                 case "FLOAT" or "FLOAT64":
-                    return DoubleType.Default;
+                    return GetType(field, DoubleType.Default);
                 case "BOOL" or "BOOLEAN":
-                    return BooleanType.Default;
+                    return GetType(field, BooleanType.Default);
                 case "STRING":
-                    return StringType.Default;
+                    return GetType(field, StringType.Default);
                 case "BYTES":
-                    return BinaryType.Default;
+                    return GetType(field, BinaryType.Default);
                 case "DATETIME":
-                    return TimestampType.Default;
+                    return GetType(field, TimestampType.Default);
                 case "TIMESTAMP":
-                    return TimestampType.Default;
+                    return GetType(field, TimestampType.Default);
                 case "TIME":
-                    return Time64Type.Default;
+                    return GetType(field, Time64Type.Default);
                 case "DATE":
-                    return Date64Type.Default;
+                    return GetType(field, Date64Type.Default);
                 case "RECORD" or "STRUCT":
                     // its a json string
-                    return StringType.Default;
+                    return GetType(field, StringType.Default);
 
                 // treat these values as strings
                 case "GEOGRAPHY" or "JSON":
-                    return StringType.Default;
+                    return GetType(field, StringType.Default);
 
                 // get schema cannot get precision and scale for NUMERIC or 
BIGNUMERIC types
                 // instead, the max values are returned from BigQuery
                 // see 'precision' on 
https://cloud.google.com/bigquery/docs/reference/rest/v2/tables
                 // and discussion in 
https://github.com/apache/arrow-adbc/pull/1192#discussion_r1365987279
 
                 case "NUMERIC" or "DECIMAL":
-                    return new Decimal128Type(38, 9);
+                    return GetType(field, new Decimal128Type(38, 9));
 
                 case "BIGNUMERIC" or "BIGDECIMAL":
-                    return 
bool.Parse(this.Options[BigQueryParameters.LargeDecimalsAsString]) ? 
StringType.Default : new Decimal256Type(76, 38);
+                    return 
bool.Parse(this.Options[BigQueryParameters.LargeDecimalsAsString]) ? 
GetType(field, StringType.Default) : GetType(field, new Decimal256Type(76, 38));
 
                 default: throw new InvalidOperationException($"{field.Type} 
cannot be translated");
             }
         }
 
+        private IArrowType GetType(TableFieldSchema field, IArrowType type)
+        {
+            if(field.Mode == "REPEATED")

Review Comment:
   nit: space before paren?



##########
csharp/test/Apache.Arrow.Adbc.Tests/Metadata/GetObjectsParser.cs:
##########
@@ -149,5 +152,55 @@ private static List<AdbcColumn> ParseColumns(StructArray 
columnsArray)
 
             return columns;
         }
+
+        private static List<AdbcConstraint> ParseConstraints(StructArray 
constraintsArray)
+        {
+            if (constraintsArray == null) return null;
+
+            List<AdbcConstraint> constraints = new List<AdbcConstraint>();
+
+            StringArray name = 
(StringArray)constraintsArray.Fields[StandardSchemas.ConstraintSchema.FindIndex(f
 => f.Name == "constraint_name")]; // constraint_name | utf8
+            StringArray type = 
(StringArray)constraintsArray.Fields[StandardSchemas.ConstraintSchema.FindIndex(f
 => f.Name == "constraint_type")]; //  constraint_type | utf8 not null
+            ListArray column_names = 
(ListArray)constraintsArray.Fields[StandardSchemas.ConstraintSchema.FindIndex(f 
=> f.Name == "constraint_column_names")]; //      constraint_column_names | 
list<utf8> not null
+            ListArray column_usage = 
(ListArray)constraintsArray.Fields[StandardSchemas.ConstraintSchema.FindIndex(f 
=> f.Name == "constraint_column_usage")]; //      constraint_column_usage | 
list<USAGE_SCHEMA>
+
+            for (int i = 0; i < constraintsArray.Length; i++)
+            {
+                AdbcConstraint c = new AdbcConstraint();
+                c.Name = name.GetString(i);
+                c.Type = type.GetString(i);
+
+                StringArray col_names = column_names.GetSlicedValues(i) as 
StringArray;
+                StructArray usage = column_usage.GetSlicedValues(i) as 
StructArray;
+
+                //for(int j=0; j< column_names.Length; j++)

Review Comment:
   This is commented-out because it might be enabled at some point e.g. when 
some other problem is fixed? If so, consider leaving an explanatory comment.



##########
csharp/src/Drivers/BigQuery/BigQueryConnection.cs:
##########
@@ -683,8 +691,40 @@ private XdbcDataType ToXdbcDataType(string type)
                     return XdbcDataType.XdbcDataType_XDBC_VARBINARY;
                 case "NUMERIC" or "DECIMAL" or "BIGNUMERIC" or "BIGDECIMAL":
                     return XdbcDataType.XdbcDataType_XDBC_NUMERIC;
-
                 default:
+
+                    int decimalMaxScale = 28;
+
+                    if(type.StartsWith("NUMERIC("))

Review Comment:
   nit: space before paren?



-- 
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]

Reply via email to