QuickQueryExtensions
Quick Query extensions.
using Azure.Storage.Blobs.Models;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace Azure.Storage.Blobs
{
internal static class QuickQueryExtensions
{
internal static QuerySerialization ToQuickQuerySerialization(this BlobQueryTextOptions textConfiguration, bool isInput)
{
if (textConfiguration == null)
return null;
BlobQueryCsvTextOptions blobQueryCsvTextOptions = textConfiguration as BlobQueryCsvTextOptions;
QuerySerialization querySerialization;
if (blobQueryCsvTextOptions != null) {
querySerialization = new QuerySerialization(new QueryFormat(QueryFormatType.Delimited));
QueryFormat format = querySerialization.Format;
DelimitedTextConfigurationInternal obj = new DelimitedTextConfigurationInternal {
ColumnSeparator = blobQueryCsvTextOptions.ColumnSeparator?.ToString(CultureInfo.InvariantCulture)
};
char? nullable = blobQueryCsvTextOptions.QuotationCharacter;
object fieldQuote;
char valueOrDefault;
if (!nullable.HasValue)
fieldQuote = null;
else {
valueOrDefault = nullable.GetValueOrDefault();
fieldQuote = valueOrDefault.ToString(CultureInfo.InvariantCulture);
}
obj.FieldQuote = (string)fieldQuote;
obj.RecordSeparator = blobQueryCsvTextOptions.RecordSeparator?.ToString(CultureInfo.InvariantCulture);
nullable = blobQueryCsvTextOptions.EscapeCharacter;
object escapeChar;
if (!nullable.HasValue)
escapeChar = null;
else {
valueOrDefault = nullable.GetValueOrDefault();
escapeChar = valueOrDefault.ToString(CultureInfo.InvariantCulture);
}
obj.EscapeChar = (string)escapeChar;
obj.HeadersPresent = blobQueryCsvTextOptions.HasHeaders;
format.DelimitedTextConfiguration = obj;
} else {
BlobQueryJsonTextOptions blobQueryJsonTextOptions = textConfiguration as BlobQueryJsonTextOptions;
if (blobQueryJsonTextOptions != null) {
querySerialization = new QuerySerialization(new QueryFormat(QueryFormatType.Json));
querySerialization.Format.JsonTextConfiguration = new JsonTextConfigurationInternal {
RecordSeparator = blobQueryJsonTextOptions.RecordSeparator?.ToString(CultureInfo.InvariantCulture)
};
} else {
BlobQueryArrowOptions blobQueryArrowOptions = textConfiguration as BlobQueryArrowOptions;
if (blobQueryArrowOptions != null) {
if (isInput)
throw new ArgumentException("BlobQueryArrowOptions can only be used for output serialization.");
querySerialization = new QuerySerialization(new QueryFormat(QueryFormatType.Arrow));
QueryFormat format2 = querySerialization.Format;
IList<BlobQueryArrowField> schema = blobQueryArrowOptions.Schema;
format2.ArrowConfiguration = new ArrowTextConfigurationInternal((schema != null) ? schema.Select(ToArrowFieldInternal).ToList() : null);
} else {
if (!(textConfiguration is BlobQueryParquetTextOptions))
throw new ArgumentException("Invalid options type. Valid options are BlobQueryCsvTextOptions, BlobQueryJsonTextOptions, BlobQueryArrowOptions, and BlobQueryParquetTextOptions");
if (!isInput)
throw new ArgumentException("BlobQueryParquetTextOptions can only be used for input serialization.");
querySerialization = new QuerySerialization(new QueryFormat(QueryFormatType.Parquet));
}
}
}
return querySerialization;
}
internal static ArrowFieldInternal ToArrowFieldInternal(this BlobQueryArrowField blobQueryArrowField)
{
if (blobQueryArrowField == null)
return null;
return new ArrowFieldInternal(blobQueryArrowField.Type.ToArrowFiledInternalType()) {
Name = blobQueryArrowField.Name,
Precision = new int?(blobQueryArrowField.Precision),
Scale = new int?(blobQueryArrowField.Scale)
};
}
internal static string ToArrowFiledInternalType(this BlobQueryArrowFieldType blobQueryArrowFieldType)
{
switch (blobQueryArrowFieldType) {
case BlobQueryArrowFieldType.Bool:
return "bool";
case BlobQueryArrowFieldType.Decimal:
return "decimal";
case BlobQueryArrowFieldType.Double:
return "double";
case BlobQueryArrowFieldType.Int64:
return "int64";
case BlobQueryArrowFieldType.String:
return "string";
case BlobQueryArrowFieldType.Timestamp:
return "timestamp[ms]";
default:
throw new ArgumentException(string.Format("Unknown {0}: {1}", "BlobQueryArrowFieldType", blobQueryArrowFieldType));
}
}
}
}