Skip to content

Commit 2a719b0

Browse files
add support tests for other basic data types + fix read byte array implementation (#225)
1 parent 91c300d commit 2a719b0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+997
-801
lines changed

CodeGenerator/Generators/UtilsGen.cs

-26
Original file line numberDiff line numberDiff line change
@@ -93,32 +93,6 @@ public class NullToNStringConverter : DefaultTypeConverter
9393
public static class {{ClassName}}
9494
{
9595
{{optionalNullToNStringConverter}}
96-
97-
public static byte[] GetBytes(IDataRecord reader, int ordinal)
98-
{
99-
const int bufferSize = 100000;
100-
if (reader is null) throw new ArgumentNullException(nameof(reader));
101-
var buffer = new byte[bufferSize];
102-
103-
var (bytesRead, offset) = (0, 0);
104-
while (bytesRead < bufferSize)
105-
{
106-
var read = (int) reader.GetBytes(
107-
ordinal,
108-
bufferSize + bytesRead,
109-
buffer,
110-
offset,
111-
bufferSize - bytesRead);
112-
if (read == 0)
113-
break;
114-
bytesRead += read;
115-
offset += read;
116-
}
117-
118-
if (bytesRead < bufferSize)
119-
Array.Resize(ref buffer, bytesRead);
120-
return buffer;
121-
}
12296
12397
public static string TransformQueryForSliceArgs(string originalSql, int sliceSize, string paramName)
12498
{

Drivers/DbDriver.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public abstract class DbDriver
1717

1818
private HashSet<string> NullableTypesInDotnetCore { get; } = ["string", "object"];
1919

20-
private HashSet<string> NullableTypes { get; } = ["short", "long", "double", "decimal", "int", "float", "bool", "DateTime"];
20+
private HashSet<string> NullableTypes { get; } = ["bool", "short", "int", "long", "float", "double", "decimal", "DateTime"];
2121

2222
protected abstract List<ColumnMapping> ColumnMappings { get; }
2323

Drivers/Generators/CopyFromDeclareGen.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ public class CopyFromDeclareGen(DbDriver dbDriver)
99
public MemberDeclarationSyntax Generate(string queryTextConstant, string argInterface, Query query)
1010
{
1111
return ParseMemberDeclaration($$"""
12-
public async Task {{query.Name}}(List<{{argInterface}}> args)
13-
{
14-
{{((ICopyFrom)dbDriver).GetCopyFromImpl(query, queryTextConstant)}}
15-
}
16-
""")!;
12+
public async Task {{query.Name}}(List<{{argInterface}}> args)
13+
{
14+
{{((ICopyFrom)dbDriver).GetCopyFromImpl(query, queryTextConstant)}}
15+
}
16+
""")!;
1717
}
1818
}

Drivers/MySqlConnectorDriver.cs

+7-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public partial class MySqlConnectorDriver(Options options, Dictionary<string, Ta
2828
{ "mediumblob", null },
2929
{ "tinyblob", null },
3030
{ "varbinary", null }
31-
}, ordinal => $"Utils.GetBytes(reader, {ordinal})"),
31+
}, ordinal => $"reader.GetFieldValue<byte[]>({ordinal})"),
3232
new("string",
3333
new Dictionary<string, string?>
3434
{
@@ -50,13 +50,17 @@ public partial class MySqlConnectorDriver(Options options, Dictionary<string, Ta
5050
{ "datetime", null },
5151
{ "timestamp", null }
5252
}, ordinal => $"reader.GetDateTime({ordinal})"),
53+
new("short",
54+
new Dictionary<string, string?>
55+
{
56+
{ "smallint", null },
57+
{ "year", null }
58+
}, ordinal => $"reader.GetInt16({ordinal})"),
5359
new("int",
5460
new Dictionary<string, string?>
5561
{
5662
{ "int", null },
5763
{ "mediumint", null },
58-
{ "smallint", null },
59-
{ "year", null }
6064
}, ordinal => $"reader.GetInt32({ordinal})"),
6165
new("bool",
6266
new Dictionary<string, string?>

Drivers/NpgsqlDriver.cs

+7-3
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public NpgsqlDriver(Options options, Dictionary<string, Table> tables) : base(op
4343
{ "mediumblob", null },
4444
{ "tinyblob", null },
4545
{ "varbinary", null }
46-
}, ordinal => $"Utils.GetBytes(reader, {ordinal})"),
46+
}, ordinal => $"reader.GetFieldValue<byte[]>({ordinal})"),
4747
new("string",
4848
new Dictionary<string, string?>
4949
{
@@ -91,9 +91,13 @@ public NpgsqlDriver(Options options, Dictionary<string, Table> tables) : base(op
9191
new Dictionary<string, string?>
9292
{
9393
{ "numeric", "NpgsqlDbType.Numeric" },
94-
{ "float8", "NpgsqlDbType.Real" },
95-
{ "decimal", "NpgsqlDbType.Decimal" }
94+
{ "decimal", "NpgsqlDbType.Numeric" }
9695
}, ordinal => $"reader.GetDecimal({ordinal})"),
96+
new("double",
97+
new Dictionary<string, string?>
98+
{
99+
{ "float8", "NpgsqlDbType.Double" },
100+
}, ordinal => $"reader.GetDouble({ordinal})"),
97101
new("bool",
98102
new Dictionary<string, string?>
99103
{

Drivers/SqliteDriver.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public partial class SqliteDriver(Options options, Dictionary<string, Table> tab
1515
new("byte[]", new Dictionary<string, string?>
1616
{
1717
{"blob", null}
18-
}, ordinal => $"Utils.GetBytes(reader, {ordinal})"),
18+
}, ordinal => $"reader.GetFieldValue<byte[]>({ordinal})"),
1919
new("string",
2020
new Dictionary<string, string?>
2121
{
@@ -27,11 +27,11 @@ public partial class SqliteDriver(Options options, Dictionary<string, Table> tab
2727
{ "integer", null },
2828
{ "integernotnulldefaultunixepoch", null } // return type of UNIXEPOCH function
2929
}, ordinal => $"reader.GetInt32({ordinal})"),
30-
new("float",
30+
new("decimal",
3131
new Dictionary<string, string?>
3232
{
3333
{"real", null}
34-
}, ordinal => $"reader.GetFloat({ordinal})"),
34+
}, ordinal => $"reader.GetDecimal({ordinal})"),
3535
];
3636

3737
public override UsingDirectiveSyntax[] GetUsingDirectives()

0 commit comments

Comments
 (0)