Format Cell Values (#62)

* WIP for ability to localize cell values

* Changing how DateTimeOffsets are stored, getting unit tests going

* Reworking BufferFileStreamWriter to use dictionary approach

* Plumbing the DbCellValue type the rest of the way through

* Removing unused components to simplify contract

* Cleanup and making sure byte[] appears in parity with SSMS

* CR comments, small tweaks for optimizing LINQ
This commit is contained in:
Benjamin Russell
2016-09-22 12:00:32 -07:00
committed by GitHub
parent 1f0240dbe0
commit 93a75f1ff4
13 changed files with 535 additions and 977 deletions

View File

@@ -282,17 +282,19 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
{
// get the requested resultSet from query
Batch selectedBatch = result.Batches[saveParams.BatchIndex];
ResultSet selectedResultSet = (selectedBatch.ResultSets.ToList())[saveParams.ResultSetIndex];
ResultSet selectedResultSet = selectedBatch.ResultSets.ToList()[saveParams.ResultSetIndex];
if (saveParams.IncludeHeaders)
{
// write column names to csv
await csvFile.WriteLineAsync( string.Join( ",", selectedResultSet.Columns.Select( column => SaveResults.EncodeCsvField(column.ColumnName) ?? string.Empty)));
await csvFile.WriteLineAsync(string.Join(",",
selectedResultSet.Columns.Select(column => SaveResults.EncodeCsvField(column.ColumnName) ?? string.Empty)));
}
// write rows to csv
foreach (var row in selectedResultSet.Rows)
{
await csvFile.WriteLineAsync( string.Join( ",", row.Select( field => SaveResults.EncodeCsvField((field != null) ? field.ToString(): string.Empty))));
await csvFile.WriteLineAsync(string.Join(",",
row.Select(field => SaveResults.EncodeCsvField(field ?? string.Empty))));
}
}
@@ -336,23 +338,26 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
// get the requested resultSet from query
Batch selectedBatch = result.Batches[saveParams.BatchIndex];
ResultSet selectedResultSet = (selectedBatch.ResultSets.ToList())[saveParams.ResultSetIndex];
ResultSet selectedResultSet = selectedBatch.ResultSets.ToList()[saveParams.ResultSetIndex];
// write each row to JSON
foreach (var row in selectedResultSet.Rows)
{
jsonWriter.WriteStartObject();
foreach (var field in row.Select((value,i) => new {value, i}))
for (int i = 0; i < row.Length; i++)
{
jsonWriter.WritePropertyName(selectedResultSet.Columns[field.i].ColumnName);
if (field.value != null)
{
jsonWriter.WriteValue(field.value);
}
else
DbColumnWrapper col = selectedResultSet.Columns[i];
string val = row[i];
jsonWriter.WritePropertyName(col.ColumnName);
if (val == null)
{
jsonWriter.WriteNull();
}
}
else
{
jsonWriter.WriteValue(val);
}
}
jsonWriter.WriteEndObject();
}