From df0e100317904be4e3dd194923358becb5750b31 Mon Sep 17 00:00:00 2001 From: Ilan Uzan Date: Sun, 22 Jun 2025 17:14:17 +0200 Subject: [PATCH 01/11] fix: rename agg query to cnt --- .../EndToEndScaffold/Templates/MySqlTests.cs | 24 +++++++++---------- .../Templates/PostgresTests.cs | 22 ++++++++--------- .../EndToEndScaffold/Templates/SqliteTests.cs | 6 ++--- .../MySqlConnectorDapperTester.generated.cs | 24 +++++++++---------- .../MySqlConnectorTester.generated.cs | 24 +++++++++---------- .../NpgsqlDapperTester.generated.cs | 22 ++++++++--------- .../EndToEndTests/NpgsqlTester.generated.cs | 22 ++++++++--------- .../SqliteDapperTester.generated.cs | 6 ++--- .../EndToEndTests/SqliteTester.generated.cs | 6 ++--- .../MySqlConnectorDapperTester.generated.cs | 24 +++++++++---------- .../MySqlConnectorTester.generated.cs | 24 +++++++++---------- .../NpgsqlDapperTester.generated.cs | 22 ++++++++--------- .../NpgsqlTester.generated.cs | 22 ++++++++--------- .../SqliteDapperTester.generated.cs | 6 ++--- .../SqliteTester.generated.cs | 6 ++--- .../MySqlConnectorDapperExample/QuerySql.cs | 8 +++---- .../QuerySql.cs | 8 +++---- examples/MySqlConnectorExample/QuerySql.cs | 10 ++++---- .../MySqlConnectorLegacyExample/QuerySql.cs | 10 ++++---- examples/NpgsqlDapperExample/QuerySql.cs | 8 +++---- .../NpgsqlDapperLegacyExample/QuerySql.cs | 8 +++---- examples/NpgsqlExample/QuerySql.cs | 10 ++++---- examples/NpgsqlLegacyExample/QuerySql.cs | 10 ++++---- examples/SqliteDapperExample/QuerySql.cs | 8 +++---- .../SqliteDapperLegacyExample/QuerySql.cs | 8 +++---- examples/SqliteExample/QuerySql.cs | 10 ++++---- examples/SqliteLegacyExample/QuerySql.cs | 10 ++++---- examples/config/mysql/query.sql | 2 +- examples/config/postgresql/query.sql | 2 +- examples/config/sqlite/query.sql | 2 +- 30 files changed, 187 insertions(+), 187 deletions(-) diff --git a/end2end/EndToEndScaffold/Templates/MySqlTests.cs b/end2end/EndToEndScaffold/Templates/MySqlTests.cs index 06d1ea2e..64dad9d3 100644 --- a/end2end/EndToEndScaffold/Templates/MySqlTests.cs +++ b/end2end/EndToEndScaffold/Templates/MySqlTests.cs @@ -293,7 +293,7 @@ public async Task TestStringCopyFrom( }) .ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CChar = cChar, @@ -305,7 +305,7 @@ public async Task TestStringCopyFrom( CText = cText, CLongtext = cLongtext, }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CChar, Is.EqualTo(expected.CChar)); @@ -350,7 +350,7 @@ public async Task TestIntegerCopyFrom( }) .ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CBool = cBool, @@ -362,7 +362,7 @@ public async Task TestIntegerCopyFrom( CInteger = cInteger, CBigint = cBigint }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CBool, Is.EqualTo(expected.CBool)); @@ -405,7 +405,7 @@ public async Task TestFloatingPointCopyFrom( }) .ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CFloat = cFloat, @@ -416,7 +416,7 @@ public async Task TestFloatingPointCopyFrom( CDouble = cDouble, CDoublePrecision = cDoublePrecision }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CFloat, Is.EqualTo(expected.CFloat)); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CNumeric, Is.EqualTo(expected.CNumeric)); @@ -451,7 +451,7 @@ public async Task TestDateTimeCopyFrom( }) .ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CYear = cYear, @@ -459,7 +459,7 @@ public async Task TestDateTimeCopyFrom( CDatetime = cDatetime, CTimestamp = cTimestamp }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CYear, Is.EqualTo(expected.CYear)); @@ -499,7 +499,7 @@ public async Task TestBinaryCopyFrom( }) .ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CBit = cBit, @@ -510,7 +510,7 @@ public async Task TestBinaryCopyFrom( CMediumblob = cMediumblob, CLongblob = cLongblob }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CBit, Is.EqualTo(expected.CBit)); @@ -539,12 +539,12 @@ public async Task TestCopyFrom(int batchSize, MysqlTypesCEnum? cEnum) }) .ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CEnum = cEnum }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CEnum, Is.EqualTo(expected.CEnum)); } """ diff --git a/end2end/EndToEndScaffold/Templates/PostgresTests.cs b/end2end/EndToEndScaffold/Templates/PostgresTests.cs index fd756d22..ced71e17 100644 --- a/end2end/EndToEndScaffold/Templates/PostgresTests.cs +++ b/end2end/EndToEndScaffold/Templates/PostgresTests.cs @@ -210,7 +210,7 @@ public async Task TestStringCopyFrom( }) .ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CChar = cChar, @@ -218,7 +218,7 @@ public async Task TestStringCopyFrom( CCharacterVarying = cCharacterVarying, CText = cText }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CChar, Is.EqualTo(expected.CChar)); @@ -251,7 +251,7 @@ public async Task TestIntegerCopyFrom( }) .ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CBoolean = cBoolean, @@ -259,7 +259,7 @@ public async Task TestIntegerCopyFrom( CInteger = cInteger, CBigint = cBigint }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CBoolean, Is.EqualTo(expected.CBoolean)); @@ -268,7 +268,7 @@ public async Task TestIntegerCopyFrom( Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CBigint, Is.EqualTo(expected.CBigint)); } - private static void AssertSingularEquals(QuerySql.GetPostgresTypesAggRow expected, QuerySql.GetPostgresTypesAggRow actual) + private static void AssertSingularEquals(QuerySql.GetPostgresTypesCntRow expected, QuerySql.GetPostgresTypesCntRow actual) { } @@ -299,7 +299,7 @@ public async Task TestFloatingPointCopyFrom( }) .ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CReal = cReal, @@ -308,7 +308,7 @@ public async Task TestFloatingPointCopyFrom( CDoublePrecision = cDoublePrecision, CMoney = cMoney }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CReal, Is.EqualTo(expected.CReal)); @@ -346,7 +346,7 @@ public async Task TestDateTimeCopyFrom( }) .ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CDate = cDate, @@ -354,7 +354,7 @@ public async Task TestDateTimeCopyFrom( CTimestamp = cTimestamp, CTimestampWithTz = cTimestampWithTz, }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CDate, Is.EqualTo(expected.CDate)); @@ -382,12 +382,12 @@ public async Task TestArrayCopyFrom( }) .ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CBytea = cBytea }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual{{Consts.UnknownRecordValuePlaceholder}}.CBytea, Is.EqualTo(expected.CBytea)); diff --git a/end2end/EndToEndScaffold/Templates/SqliteTests.cs b/end2end/EndToEndScaffold/Templates/SqliteTests.cs index 00844445..c7eb367d 100644 --- a/end2end/EndToEndScaffold/Templates/SqliteTests.cs +++ b/end2end/EndToEndScaffold/Templates/SqliteTests.cs @@ -69,18 +69,18 @@ public async Task TestCopyFrom( }) .ToList(); await QuerySql.InsertSqliteTypesBatch(batchArgs); - var expected = new QuerySql.GetSqliteTypesAggRow + var expected = new QuerySql.GetSqliteTypesCntRow { Cnt = batchSize, CInteger = cInteger, CReal = cReal, CText = cText }; - var actual = await QuerySql.GetSqliteTypesAgg(); + var actual = await QuerySql.GetSqliteTypesCnt(); AssertSingularEquals(expected, actual{{Consts.UnknownRecordValuePlaceholder}}); } - private static void AssertSingularEquals(QuerySql.GetSqliteTypesAggRow expected, QuerySql.GetSqliteTypesAggRow actual) + private static void AssertSingularEquals(QuerySql.GetSqliteTypesCntRow expected, QuerySql.GetSqliteTypesCntRow actual) { Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CInteger, Is.EqualTo(expected.CInteger)); diff --git a/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs b/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs index a9de91c1..6173afc5 100644 --- a/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs +++ b/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs @@ -472,7 +472,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cNchar, { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CChar = cChar, CNchar = cNchar, CNationalChar = cNationalChar, CVarchar = cVarchar, CTinytext = cTinytext, CMediumtext = cMediumtext, CText = cText, CLongtext = cLongtext }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CChar = cChar, @@ -484,7 +484,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cNchar, CText = cText, CLongtext = cLongtext, }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CChar, Is.EqualTo(expected.CChar)); Assert.That(actual.CNchar, Is.EqualTo(expected.CNchar)); @@ -503,7 +503,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBool, bool? cBoolean { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CBool = cBool, CBoolean = cBoolean, CTinyint = cTinyint, CSmallint = cSmallint, CMediumint = cMediumint, CInt = cInt, CInteger = cInteger, CBigint = cBigint }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CBool = cBool, @@ -515,7 +515,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBool, bool? cBoolean CInteger = cInteger, CBigint = cBigint }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBool, Is.EqualTo(expected.CBool)); Assert.That(actual.CBoolean, Is.EqualTo(expected.CBoolean)); @@ -534,7 +534,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cFloat, decima { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CFloat = cFloat, CNumeric = cNumeric, CDecimal = cDecimal, CDec = cDec, CFixed = cFixed, CDouble = cDouble, CDoublePrecision = cDoublePrecision }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CFloat = cFloat, @@ -545,7 +545,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cFloat, decima CDouble = cDouble, CDoublePrecision = cDoublePrecision }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.CFloat, Is.EqualTo(expected.CFloat)); Assert.That(actual.CNumeric, Is.EqualTo(expected.CNumeric)); Assert.That(actual.CDecimal, Is.EqualTo(expected.CDecimal)); @@ -562,7 +562,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, short? cYear, DateTime? cD { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CYear = cYear, CDate = cDate, CDatetime = cDatetime, CTimestamp = cTimestamp }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CYear = cYear, @@ -570,7 +570,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, short? cYear, DateTime? cD CDatetime = cDatetime, CTimestamp = cTimestamp }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CYear, Is.EqualTo(expected.CYear)); Assert.That(actual.CDate, Is.EqualTo(expected.CDate)); @@ -586,7 +586,7 @@ public async Task TestBinaryCopyFrom(int batchSize, byte? cBit, byte[] cBinary, { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CBit = cBit, CBinary = cBinary, CVarbinary = cVarbinary, CTinyblob = cTinyblob, CBlob = cBlob, CMediumblob = cMediumblob, CLongblob = cLongblob }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CBit = cBit, @@ -597,7 +597,7 @@ public async Task TestBinaryCopyFrom(int batchSize, byte? cBit, byte[] cBinary, CMediumblob = cMediumblob, CLongblob = cLongblob }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBit, Is.EqualTo(expected.CBit)); Assert.That(actual.CBinary, Is.EqualTo(expected.CBinary)); @@ -616,12 +616,12 @@ public async Task TestCopyFrom(int batchSize, MysqlTypesCEnum? cEnum) { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CEnum = cEnum }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CEnum = cEnum }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.CEnum, Is.EqualTo(expected.CEnum)); } } diff --git a/end2end/EndToEndTests/MySqlConnectorTester.generated.cs b/end2end/EndToEndTests/MySqlConnectorTester.generated.cs index c943a2ff..ebb459cb 100644 --- a/end2end/EndToEndTests/MySqlConnectorTester.generated.cs +++ b/end2end/EndToEndTests/MySqlConnectorTester.generated.cs @@ -472,7 +472,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cNchar, { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CChar = cChar, CNchar = cNchar, CNationalChar = cNationalChar, CVarchar = cVarchar, CTinytext = cTinytext, CMediumtext = cMediumtext, CText = cText, CLongtext = cLongtext }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CChar = cChar, @@ -484,7 +484,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cNchar, CText = cText, CLongtext = cLongtext, }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Value.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.Value.CChar, Is.EqualTo(expected.CChar)); Assert.That(actual.Value.CNchar, Is.EqualTo(expected.CNchar)); @@ -503,7 +503,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBool, bool? cBoolean { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CBool = cBool, CBoolean = cBoolean, CTinyint = cTinyint, CSmallint = cSmallint, CMediumint = cMediumint, CInt = cInt, CInteger = cInteger, CBigint = cBigint }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CBool = cBool, @@ -515,7 +515,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBool, bool? cBoolean CInteger = cInteger, CBigint = cBigint }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Value.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.Value.CBool, Is.EqualTo(expected.CBool)); Assert.That(actual.Value.CBoolean, Is.EqualTo(expected.CBoolean)); @@ -534,7 +534,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cFloat, decima { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CFloat = cFloat, CNumeric = cNumeric, CDecimal = cDecimal, CDec = cDec, CFixed = cFixed, CDouble = cDouble, CDoublePrecision = cDoublePrecision }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CFloat = cFloat, @@ -545,7 +545,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cFloat, decima CDouble = cDouble, CDoublePrecision = cDoublePrecision }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Value.CFloat, Is.EqualTo(expected.CFloat)); Assert.That(actual.Value.CNumeric, Is.EqualTo(expected.CNumeric)); Assert.That(actual.Value.CDecimal, Is.EqualTo(expected.CDecimal)); @@ -562,7 +562,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, short? cYear, DateTime? cD { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CYear = cYear, CDate = cDate, CDatetime = cDatetime, CTimestamp = cTimestamp }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CYear = cYear, @@ -570,7 +570,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, short? cYear, DateTime? cD CDatetime = cDatetime, CTimestamp = cTimestamp }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Value.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.Value.CYear, Is.EqualTo(expected.CYear)); Assert.That(actual.Value.CDate, Is.EqualTo(expected.CDate)); @@ -586,7 +586,7 @@ public async Task TestBinaryCopyFrom(int batchSize, byte? cBit, byte[] cBinary, { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CBit = cBit, CBinary = cBinary, CVarbinary = cVarbinary, CTinyblob = cTinyblob, CBlob = cBlob, CMediumblob = cMediumblob, CLongblob = cLongblob }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CBit = cBit, @@ -597,7 +597,7 @@ public async Task TestBinaryCopyFrom(int batchSize, byte? cBit, byte[] cBinary, CMediumblob = cMediumblob, CLongblob = cLongblob }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Value.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.Value.CBit, Is.EqualTo(expected.CBit)); Assert.That(actual.Value.CBinary, Is.EqualTo(expected.CBinary)); @@ -616,12 +616,12 @@ public async Task TestCopyFrom(int batchSize, MysqlTypesCEnum? cEnum) { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CEnum = cEnum }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CEnum = cEnum }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Value.CEnum, Is.EqualTo(expected.CEnum)); } } diff --git a/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs b/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs index cdbdddb5..eb864c82 100644 --- a/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs +++ b/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs @@ -396,7 +396,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cVarcha { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CChar = cChar, CVarchar = cVarchar, CCharacterVarying = cCharacterVarying, CText = cText }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CChar = cChar, @@ -404,7 +404,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cVarcha CCharacterVarying = cCharacterVarying, CText = cText }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CChar, Is.EqualTo(expected.CChar)); Assert.That(actual.CVarchar, Is.EqualTo(expected.CVarchar)); @@ -419,7 +419,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CBoolean = cBoolean, CSmallint = cSmallint, CInteger = cInteger, CBigint = cBigint }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CBoolean = cBoolean, @@ -427,7 +427,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma CInteger = cInteger, CBigint = cBigint }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBoolean, Is.EqualTo(expected.CBoolean)); Assert.That(actual.CSmallint, Is.EqualTo(expected.CSmallint)); @@ -435,7 +435,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma Assert.That(actual.CBigint, Is.EqualTo(expected.CBigint)); } - private static void AssertSingularEquals(QuerySql.GetPostgresTypesAggRow expected, QuerySql.GetPostgresTypesAggRow actual) + private static void AssertSingularEquals(QuerySql.GetPostgresTypesCntRow expected, QuerySql.GetPostgresTypesCntRow actual) { } @@ -446,7 +446,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cReal, decimal { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CReal = cReal, CDecimal = cDecimal, CNumeric = cNumeric, CDoublePrecision = cDoublePrecision, CMoney = cMoney }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CReal = cReal, @@ -455,7 +455,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cReal, decimal CDoublePrecision = cDoublePrecision, CMoney = cMoney }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CReal, Is.EqualTo(expected.CReal)); Assert.That(actual.CDecimal, Is.EqualTo(expected.CDecimal)); @@ -474,7 +474,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, DateTime? cDate, TimeSpan? cTimestampWithTzAsUtc = DateTime.SpecifyKind(cTimestampWithTz.Value, DateTimeKind.Utc); var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CDate = cDate, CTime = cTime, CTimestamp = cTimestamp, CTimestampWithTz = cTimestampWithTzAsUtc }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CDate = cDate, @@ -482,7 +482,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, DateTime? cDate, TimeSpan? CTimestamp = cTimestamp, CTimestampWithTz = cTimestampWithTz, }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CDate, Is.EqualTo(expected.CDate)); Assert.That(actual.CTime, Is.EqualTo(expected.CTime)); @@ -498,12 +498,12 @@ public async Task TestArrayCopyFrom(int batchSize, byte[] cBytea) { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CBytea = cBytea }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CBytea = cBytea }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBytea, Is.EqualTo(expected.CBytea)); } diff --git a/end2end/EndToEndTests/NpgsqlTester.generated.cs b/end2end/EndToEndTests/NpgsqlTester.generated.cs index 69b41877..6828e21a 100644 --- a/end2end/EndToEndTests/NpgsqlTester.generated.cs +++ b/end2end/EndToEndTests/NpgsqlTester.generated.cs @@ -396,7 +396,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cVarcha { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CChar = cChar, CVarchar = cVarchar, CCharacterVarying = cCharacterVarying, CText = cText }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CChar = cChar, @@ -404,7 +404,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cVarcha CCharacterVarying = cCharacterVarying, CText = cText }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Value.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.Value.CChar, Is.EqualTo(expected.CChar)); Assert.That(actual.Value.CVarchar, Is.EqualTo(expected.CVarchar)); @@ -419,7 +419,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CBoolean = cBoolean, CSmallint = cSmallint, CInteger = cInteger, CBigint = cBigint }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CBoolean = cBoolean, @@ -427,7 +427,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma CInteger = cInteger, CBigint = cBigint }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Value.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.Value.CBoolean, Is.EqualTo(expected.CBoolean)); Assert.That(actual.Value.CSmallint, Is.EqualTo(expected.CSmallint)); @@ -435,7 +435,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma Assert.That(actual.Value.CBigint, Is.EqualTo(expected.CBigint)); } - private static void AssertSingularEquals(QuerySql.GetPostgresTypesAggRow expected, QuerySql.GetPostgresTypesAggRow actual) + private static void AssertSingularEquals(QuerySql.GetPostgresTypesCntRow expected, QuerySql.GetPostgresTypesCntRow actual) { } @@ -446,7 +446,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cReal, decimal { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CReal = cReal, CDecimal = cDecimal, CNumeric = cNumeric, CDoublePrecision = cDoublePrecision, CMoney = cMoney }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CReal = cReal, @@ -455,7 +455,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cReal, decimal CDoublePrecision = cDoublePrecision, CMoney = cMoney }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Value.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.Value.CReal, Is.EqualTo(expected.CReal)); Assert.That(actual.Value.CDecimal, Is.EqualTo(expected.CDecimal)); @@ -474,7 +474,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, DateTime? cDate, TimeSpan? cTimestampWithTzAsUtc = DateTime.SpecifyKind(cTimestampWithTz.Value, DateTimeKind.Utc); var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CDate = cDate, CTime = cTime, CTimestamp = cTimestamp, CTimestampWithTz = cTimestampWithTzAsUtc }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CDate = cDate, @@ -482,7 +482,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, DateTime? cDate, TimeSpan? CTimestamp = cTimestamp, CTimestampWithTz = cTimestampWithTz, }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Value.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.Value.CDate, Is.EqualTo(expected.CDate)); Assert.That(actual.Value.CTime, Is.EqualTo(expected.CTime)); @@ -498,12 +498,12 @@ public async Task TestArrayCopyFrom(int batchSize, byte[] cBytea) { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CBytea = cBytea }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CBytea = cBytea }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Value.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.Value.CBytea, Is.EqualTo(expected.CBytea)); } diff --git a/end2end/EndToEndTests/SqliteDapperTester.generated.cs b/end2end/EndToEndTests/SqliteDapperTester.generated.cs index 4763c177..48eda29d 100644 --- a/end2end/EndToEndTests/SqliteDapperTester.generated.cs +++ b/end2end/EndToEndTests/SqliteDapperTester.generated.cs @@ -339,18 +339,18 @@ public async Task TestCopyFrom(int batchSize, int? cInteger, decimal? cReal, str { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertSqliteTypesBatchArgs { CInteger = cInteger, CReal = cReal, CText = cText }).ToList(); await QuerySql.InsertSqliteTypesBatch(batchArgs); - var expected = new QuerySql.GetSqliteTypesAggRow + var expected = new QuerySql.GetSqliteTypesCntRow { Cnt = batchSize, CInteger = cInteger, CReal = cReal, CText = cText }; - var actual = await QuerySql.GetSqliteTypesAgg(); + var actual = await QuerySql.GetSqliteTypesCnt(); AssertSingularEquals(expected, actual); } - private static void AssertSingularEquals(QuerySql.GetSqliteTypesAggRow expected, QuerySql.GetSqliteTypesAggRow actual) + private static void AssertSingularEquals(QuerySql.GetSqliteTypesCntRow expected, QuerySql.GetSqliteTypesCntRow actual) { Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CInteger, Is.EqualTo(expected.CInteger)); diff --git a/end2end/EndToEndTests/SqliteTester.generated.cs b/end2end/EndToEndTests/SqliteTester.generated.cs index 2695a577..4447f371 100644 --- a/end2end/EndToEndTests/SqliteTester.generated.cs +++ b/end2end/EndToEndTests/SqliteTester.generated.cs @@ -339,18 +339,18 @@ public async Task TestCopyFrom(int batchSize, int? cInteger, decimal? cReal, str { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertSqliteTypesBatchArgs { CInteger = cInteger, CReal = cReal, CText = cText }).ToList(); await QuerySql.InsertSqliteTypesBatch(batchArgs); - var expected = new QuerySql.GetSqliteTypesAggRow + var expected = new QuerySql.GetSqliteTypesCntRow { Cnt = batchSize, CInteger = cInteger, CReal = cReal, CText = cText }; - var actual = await QuerySql.GetSqliteTypesAgg(); + var actual = await QuerySql.GetSqliteTypesCnt(); AssertSingularEquals(expected, actual.Value); } - private static void AssertSingularEquals(QuerySql.GetSqliteTypesAggRow expected, QuerySql.GetSqliteTypesAggRow actual) + private static void AssertSingularEquals(QuerySql.GetSqliteTypesCntRow expected, QuerySql.GetSqliteTypesCntRow actual) { Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CInteger, Is.EqualTo(expected.CInteger)); diff --git a/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs b/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs index 2af4e2f8..9df726f1 100644 --- a/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs @@ -472,7 +472,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cNchar, { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CChar = cChar, CNchar = cNchar, CNationalChar = cNationalChar, CVarchar = cVarchar, CTinytext = cTinytext, CMediumtext = cMediumtext, CText = cText, CLongtext = cLongtext }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CChar = cChar, @@ -484,7 +484,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cNchar, CText = cText, CLongtext = cLongtext, }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CChar, Is.EqualTo(expected.CChar)); Assert.That(actual.CNchar, Is.EqualTo(expected.CNchar)); @@ -503,7 +503,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBool, bool? cBoolean { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CBool = cBool, CBoolean = cBoolean, CTinyint = cTinyint, CSmallint = cSmallint, CMediumint = cMediumint, CInt = cInt, CInteger = cInteger, CBigint = cBigint }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CBool = cBool, @@ -515,7 +515,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBool, bool? cBoolean CInteger = cInteger, CBigint = cBigint }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBool, Is.EqualTo(expected.CBool)); Assert.That(actual.CBoolean, Is.EqualTo(expected.CBoolean)); @@ -534,7 +534,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cFloat, decima { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CFloat = cFloat, CNumeric = cNumeric, CDecimal = cDecimal, CDec = cDec, CFixed = cFixed, CDouble = cDouble, CDoublePrecision = cDoublePrecision }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CFloat = cFloat, @@ -545,7 +545,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cFloat, decima CDouble = cDouble, CDoublePrecision = cDoublePrecision }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.CFloat, Is.EqualTo(expected.CFloat)); Assert.That(actual.CNumeric, Is.EqualTo(expected.CNumeric)); Assert.That(actual.CDecimal, Is.EqualTo(expected.CDecimal)); @@ -562,7 +562,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, short? cYear, DateTime? cD { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CYear = cYear, CDate = cDate, CDatetime = cDatetime, CTimestamp = cTimestamp }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CYear = cYear, @@ -570,7 +570,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, short? cYear, DateTime? cD CDatetime = cDatetime, CTimestamp = cTimestamp }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CYear, Is.EqualTo(expected.CYear)); Assert.That(actual.CDate, Is.EqualTo(expected.CDate)); @@ -586,7 +586,7 @@ public async Task TestBinaryCopyFrom(int batchSize, byte? cBit, byte[] cBinary, { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CBit = cBit, CBinary = cBinary, CVarbinary = cVarbinary, CTinyblob = cTinyblob, CBlob = cBlob, CMediumblob = cMediumblob, CLongblob = cLongblob }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CBit = cBit, @@ -597,7 +597,7 @@ public async Task TestBinaryCopyFrom(int batchSize, byte? cBit, byte[] cBinary, CMediumblob = cMediumblob, CLongblob = cLongblob }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBit, Is.EqualTo(expected.CBit)); Assert.That(actual.CBinary, Is.EqualTo(expected.CBinary)); @@ -616,12 +616,12 @@ public async Task TestCopyFrom(int batchSize, MysqlTypesCEnum? cEnum) { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CEnum = cEnum }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CEnum = cEnum }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.CEnum, Is.EqualTo(expected.CEnum)); } } diff --git a/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs b/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs index eeb3b2a2..3b484e08 100644 --- a/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs @@ -472,7 +472,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cNchar, { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CChar = cChar, CNchar = cNchar, CNationalChar = cNationalChar, CVarchar = cVarchar, CTinytext = cTinytext, CMediumtext = cMediumtext, CText = cText, CLongtext = cLongtext }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CChar = cChar, @@ -484,7 +484,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cNchar, CText = cText, CLongtext = cLongtext, }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CChar, Is.EqualTo(expected.CChar)); Assert.That(actual.CNchar, Is.EqualTo(expected.CNchar)); @@ -503,7 +503,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBool, bool? cBoolean { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CBool = cBool, CBoolean = cBoolean, CTinyint = cTinyint, CSmallint = cSmallint, CMediumint = cMediumint, CInt = cInt, CInteger = cInteger, CBigint = cBigint }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CBool = cBool, @@ -515,7 +515,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBool, bool? cBoolean CInteger = cInteger, CBigint = cBigint }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBool, Is.EqualTo(expected.CBool)); Assert.That(actual.CBoolean, Is.EqualTo(expected.CBoolean)); @@ -534,7 +534,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cFloat, decima { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CFloat = cFloat, CNumeric = cNumeric, CDecimal = cDecimal, CDec = cDec, CFixed = cFixed, CDouble = cDouble, CDoublePrecision = cDoublePrecision }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CFloat = cFloat, @@ -545,7 +545,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cFloat, decima CDouble = cDouble, CDoublePrecision = cDoublePrecision }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.CFloat, Is.EqualTo(expected.CFloat)); Assert.That(actual.CNumeric, Is.EqualTo(expected.CNumeric)); Assert.That(actual.CDecimal, Is.EqualTo(expected.CDecimal)); @@ -562,7 +562,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, short? cYear, DateTime? cD { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CYear = cYear, CDate = cDate, CDatetime = cDatetime, CTimestamp = cTimestamp }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CYear = cYear, @@ -570,7 +570,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, short? cYear, DateTime? cD CDatetime = cDatetime, CTimestamp = cTimestamp }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CYear, Is.EqualTo(expected.CYear)); Assert.That(actual.CDate, Is.EqualTo(expected.CDate)); @@ -586,7 +586,7 @@ public async Task TestBinaryCopyFrom(int batchSize, byte? cBit, byte[] cBinary, { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CBit = cBit, CBinary = cBinary, CVarbinary = cVarbinary, CTinyblob = cTinyblob, CBlob = cBlob, CMediumblob = cMediumblob, CLongblob = cLongblob }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CBit = cBit, @@ -597,7 +597,7 @@ public async Task TestBinaryCopyFrom(int batchSize, byte? cBit, byte[] cBinary, CMediumblob = cMediumblob, CLongblob = cLongblob }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBit, Is.EqualTo(expected.CBit)); Assert.That(actual.CBinary, Is.EqualTo(expected.CBinary)); @@ -616,12 +616,12 @@ public async Task TestCopyFrom(int batchSize, MysqlTypesCEnum? cEnum) { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertMysqlTypesBatchArgs { CEnum = cEnum }).ToList(); await QuerySql.InsertMysqlTypesBatch(batchArgs); - var expected = new QuerySql.GetMysqlTypesAggRow + var expected = new QuerySql.GetMysqlTypesCntRow { Cnt = batchSize, CEnum = cEnum }; - var actual = await QuerySql.GetMysqlTypesAgg(); + var actual = await QuerySql.GetMysqlTypesCnt(); Assert.That(actual.CEnum, Is.EqualTo(expected.CEnum)); } } diff --git a/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs b/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs index ed636326..9ae79dd1 100644 --- a/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs @@ -396,7 +396,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cVarcha { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CChar = cChar, CVarchar = cVarchar, CCharacterVarying = cCharacterVarying, CText = cText }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CChar = cChar, @@ -404,7 +404,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cVarcha CCharacterVarying = cCharacterVarying, CText = cText }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CChar, Is.EqualTo(expected.CChar)); Assert.That(actual.CVarchar, Is.EqualTo(expected.CVarchar)); @@ -419,7 +419,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CBoolean = cBoolean, CSmallint = cSmallint, CInteger = cInteger, CBigint = cBigint }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CBoolean = cBoolean, @@ -427,7 +427,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma CInteger = cInteger, CBigint = cBigint }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBoolean, Is.EqualTo(expected.CBoolean)); Assert.That(actual.CSmallint, Is.EqualTo(expected.CSmallint)); @@ -435,7 +435,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma Assert.That(actual.CBigint, Is.EqualTo(expected.CBigint)); } - private static void AssertSingularEquals(QuerySql.GetPostgresTypesAggRow expected, QuerySql.GetPostgresTypesAggRow actual) + private static void AssertSingularEquals(QuerySql.GetPostgresTypesCntRow expected, QuerySql.GetPostgresTypesCntRow actual) { } @@ -446,7 +446,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cReal, decimal { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CReal = cReal, CDecimal = cDecimal, CNumeric = cNumeric, CDoublePrecision = cDoublePrecision, CMoney = cMoney }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CReal = cReal, @@ -455,7 +455,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cReal, decimal CDoublePrecision = cDoublePrecision, CMoney = cMoney }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CReal, Is.EqualTo(expected.CReal)); Assert.That(actual.CDecimal, Is.EqualTo(expected.CDecimal)); @@ -474,7 +474,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, DateTime? cDate, TimeSpan? cTimestampWithTzAsUtc = DateTime.SpecifyKind(cTimestampWithTz.Value, DateTimeKind.Utc); var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CDate = cDate, CTime = cTime, CTimestamp = cTimestamp, CTimestampWithTz = cTimestampWithTzAsUtc }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CDate = cDate, @@ -482,7 +482,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, DateTime? cDate, TimeSpan? CTimestamp = cTimestamp, CTimestampWithTz = cTimestampWithTz, }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CDate, Is.EqualTo(expected.CDate)); Assert.That(actual.CTime, Is.EqualTo(expected.CTime)); @@ -498,12 +498,12 @@ public async Task TestArrayCopyFrom(int batchSize, byte[] cBytea) { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CBytea = cBytea }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CBytea = cBytea }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBytea, Is.EqualTo(expected.CBytea)); } diff --git a/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs b/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs index 1c43f210..60df12c9 100644 --- a/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs @@ -396,7 +396,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cVarcha { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CChar = cChar, CVarchar = cVarchar, CCharacterVarying = cCharacterVarying, CText = cText }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CChar = cChar, @@ -404,7 +404,7 @@ public async Task TestStringCopyFrom(int batchSize, string cChar, string cVarcha CCharacterVarying = cCharacterVarying, CText = cText }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CChar, Is.EqualTo(expected.CChar)); Assert.That(actual.CVarchar, Is.EqualTo(expected.CVarchar)); @@ -419,7 +419,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CBoolean = cBoolean, CSmallint = cSmallint, CInteger = cInteger, CBigint = cBigint }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CBoolean = cBoolean, @@ -427,7 +427,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma CInteger = cInteger, CBigint = cBigint }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBoolean, Is.EqualTo(expected.CBoolean)); Assert.That(actual.CSmallint, Is.EqualTo(expected.CSmallint)); @@ -435,7 +435,7 @@ public async Task TestIntegerCopyFrom(int batchSize, bool? cBoolean, short? cSma Assert.That(actual.CBigint, Is.EqualTo(expected.CBigint)); } - private static void AssertSingularEquals(QuerySql.GetPostgresTypesAggRow expected, QuerySql.GetPostgresTypesAggRow actual) + private static void AssertSingularEquals(QuerySql.GetPostgresTypesCntRow expected, QuerySql.GetPostgresTypesCntRow actual) { } @@ -446,7 +446,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cReal, decimal { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CReal = cReal, CDecimal = cDecimal, CNumeric = cNumeric, CDoublePrecision = cDoublePrecision, CMoney = cMoney }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CReal = cReal, @@ -455,7 +455,7 @@ public async Task TestFloatingPointCopyFrom(int batchSize, float? cReal, decimal CDoublePrecision = cDoublePrecision, CMoney = cMoney }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CReal, Is.EqualTo(expected.CReal)); Assert.That(actual.CDecimal, Is.EqualTo(expected.CDecimal)); @@ -474,7 +474,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, DateTime? cDate, TimeSpan? cTimestampWithTzAsUtc = DateTime.SpecifyKind(cTimestampWithTz.Value, DateTimeKind.Utc); var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CDate = cDate, CTime = cTime, CTimestamp = cTimestamp, CTimestampWithTz = cTimestampWithTzAsUtc }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CDate = cDate, @@ -482,7 +482,7 @@ public async Task TestDateTimeCopyFrom(int batchSize, DateTime? cDate, TimeSpan? CTimestamp = cTimestamp, CTimestampWithTz = cTimestampWithTz, }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CDate, Is.EqualTo(expected.CDate)); Assert.That(actual.CTime, Is.EqualTo(expected.CTime)); @@ -498,12 +498,12 @@ public async Task TestArrayCopyFrom(int batchSize, byte[] cBytea) { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertPostgresTypesBatchArgs { CBytea = cBytea }).ToList(); await QuerySql.InsertPostgresTypesBatch(batchArgs); - var expected = new QuerySql.GetPostgresTypesAggRow + var expected = new QuerySql.GetPostgresTypesCntRow { Cnt = batchSize, CBytea = cBytea }; - var actual = await QuerySql.GetPostgresTypesAgg(); + var actual = await QuerySql.GetPostgresTypesCnt(); Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CBytea, Is.EqualTo(expected.CBytea)); } diff --git a/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs b/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs index 81545761..2aeee1c1 100644 --- a/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs @@ -339,18 +339,18 @@ public async Task TestCopyFrom(int batchSize, int? cInteger, decimal? cReal, str { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertSqliteTypesBatchArgs { CInteger = cInteger, CReal = cReal, CText = cText }).ToList(); await QuerySql.InsertSqliteTypesBatch(batchArgs); - var expected = new QuerySql.GetSqliteTypesAggRow + var expected = new QuerySql.GetSqliteTypesCntRow { Cnt = batchSize, CInteger = cInteger, CReal = cReal, CText = cText }; - var actual = await QuerySql.GetSqliteTypesAgg(); + var actual = await QuerySql.GetSqliteTypesCnt(); AssertSingularEquals(expected, actual); } - private static void AssertSingularEquals(QuerySql.GetSqliteTypesAggRow expected, QuerySql.GetSqliteTypesAggRow actual) + private static void AssertSingularEquals(QuerySql.GetSqliteTypesCntRow expected, QuerySql.GetSqliteTypesCntRow actual) { Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CInteger, Is.EqualTo(expected.CInteger)); diff --git a/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs b/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs index 9e1b7cc1..c0914770 100644 --- a/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs @@ -339,18 +339,18 @@ public async Task TestCopyFrom(int batchSize, int? cInteger, decimal? cReal, str { var batchArgs = Enumerable.Range(0, batchSize).Select(_ => new QuerySql.InsertSqliteTypesBatchArgs { CInteger = cInteger, CReal = cReal, CText = cText }).ToList(); await QuerySql.InsertSqliteTypesBatch(batchArgs); - var expected = new QuerySql.GetSqliteTypesAggRow + var expected = new QuerySql.GetSqliteTypesCntRow { Cnt = batchSize, CInteger = cInteger, CReal = cReal, CText = cText }; - var actual = await QuerySql.GetSqliteTypesAgg(); + var actual = await QuerySql.GetSqliteTypesCnt(); AssertSingularEquals(expected, actual); } - private static void AssertSingularEquals(QuerySql.GetSqliteTypesAggRow expected, QuerySql.GetSqliteTypesAggRow actual) + private static void AssertSingularEquals(QuerySql.GetSqliteTypesCntRow expected, QuerySql.GetSqliteTypesCntRow actual) { Assert.That(actual.Cnt, Is.EqualTo(expected.Cnt)); Assert.That(actual.CInteger, Is.EqualTo(expected.CInteger)); diff --git a/examples/MySqlConnectorDapperExample/QuerySql.cs b/examples/MySqlConnectorDapperExample/QuerySql.cs index af71692a..4ee445f4 100644 --- a/examples/MySqlConnectorDapperExample/QuerySql.cs +++ b/examples/MySqlConnectorDapperExample/QuerySql.cs @@ -574,8 +574,8 @@ public class GetMysqlTypesRow } } - private const string GetMysqlTypesAggSql = "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float , c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob FROM mysql_types GROUP BY c_bool , c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob LIMIT 1 ; SELECT LAST_INSERT_ID ( ) "; - public class GetMysqlTypesAggRow + private const string GetMysqlTypesCntSql = "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float , c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob FROM mysql_types GROUP BY c_bool , c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob LIMIT 1 ; SELECT LAST_INSERT_ID ( ) "; + public class GetMysqlTypesCntRow { public required long Cnt { get; init; } public bool? CBool { get; init; } @@ -614,11 +614,11 @@ public class GetMysqlTypesAggRow public byte[]? CMediumblob { get; init; } public byte[]? CLongblob { get; init; } }; - public async Task GetMysqlTypesAgg() + public async Task GetMysqlTypesCnt() { using (var connection = new MySqlConnection(ConnectionString)) { - var result = await connection.QueryFirstOrDefaultAsync(GetMysqlTypesAggSql); + var result = await connection.QueryFirstOrDefaultAsync(GetMysqlTypesCntSql); return result; } } diff --git a/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs b/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs index 41d699ac..6caee42b 100644 --- a/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs +++ b/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs @@ -574,8 +574,8 @@ public async Task GetMysqlTypes() } } - private const string GetMysqlTypesAggSql = "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float , c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob FROM mysql_types GROUP BY c_bool , c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob LIMIT 1 ; SELECT LAST_INSERT_ID ( ) "; - public class GetMysqlTypesAggRow + private const string GetMysqlTypesCntSql = "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float , c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob FROM mysql_types GROUP BY c_bool , c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob LIMIT 1 ; SELECT LAST_INSERT_ID ( ) "; + public class GetMysqlTypesCntRow { public long Cnt { get; set; } public bool? CBool { get; set; } @@ -614,11 +614,11 @@ public class GetMysqlTypesAggRow public byte[] CMediumblob { get; set; } public byte[] CLongblob { get; set; } }; - public async Task GetMysqlTypesAgg() + public async Task GetMysqlTypesCnt() { using (var connection = new MySqlConnection(ConnectionString)) { - var result = await connection.QueryFirstOrDefaultAsync(GetMysqlTypesAggSql); + var result = await connection.QueryFirstOrDefaultAsync(GetMysqlTypesCntSql); return result; } } diff --git a/examples/MySqlConnectorExample/QuerySql.cs b/examples/MySqlConnectorExample/QuerySql.cs index a30e423e..54106f8d 100644 --- a/examples/MySqlConnectorExample/QuerySql.cs +++ b/examples/MySqlConnectorExample/QuerySql.cs @@ -526,20 +526,20 @@ public async Task InsertMysqlTypesBatch(List args) return null; } - private const string GetMysqlTypesAggSql = "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float , c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob FROM mysql_types GROUP BY c_bool , c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob LIMIT 1 "; - public readonly record struct GetMysqlTypesAggRow(long Cnt, bool? CBool, bool? CBoolean, byte? CBit, short? CTinyint, short? CSmallint, int? CMediumint, int? CInt, int? CInteger, long? CBigint, double? CFloat, decimal? CNumeric, decimal? CDecimal, decimal? CDec, decimal? CFixed, double? CDouble, double? CDoublePrecision, string? CChar, string? CNchar, string? CNationalChar, string? CVarchar, string? CTinytext, string? CMediumtext, string? CText, string? CLongtext, MysqlTypesCEnum? CEnum, short? CYear, DateTime? CDate, DateTime? CDatetime, DateTime? CTimestamp, byte[]? CBinary, byte[]? CVarbinary, byte[]? CTinyblob, byte[]? CBlob, byte[]? CMediumblob, byte[]? CLongblob); - public async Task GetMysqlTypesAgg() + private const string GetMysqlTypesCntSql = "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float , c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob FROM mysql_types GROUP BY c_bool , c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob LIMIT 1 "; + public readonly record struct GetMysqlTypesCntRow(long Cnt, bool? CBool, bool? CBoolean, byte? CBit, short? CTinyint, short? CSmallint, int? CMediumint, int? CInt, int? CInteger, long? CBigint, double? CFloat, decimal? CNumeric, decimal? CDecimal, decimal? CDec, decimal? CFixed, double? CDouble, double? CDoublePrecision, string? CChar, string? CNchar, string? CNationalChar, string? CVarchar, string? CTinytext, string? CMediumtext, string? CText, string? CLongtext, MysqlTypesCEnum? CEnum, short? CYear, DateTime? CDate, DateTime? CDatetime, DateTime? CTimestamp, byte[]? CBinary, byte[]? CVarbinary, byte[]? CTinyblob, byte[]? CBlob, byte[]? CMediumblob, byte[]? CLongblob); + public async Task GetMysqlTypesCnt() { using (var connection = new MySqlConnection(ConnectionString)) { await connection.OpenAsync(); - using (var command = new MySqlCommand(GetMysqlTypesAggSql, connection)) + using (var command = new MySqlCommand(GetMysqlTypesCntSql, connection)) { using (var reader = await command.ExecuteReaderAsync()) { if (await reader.ReadAsync()) { - return new GetMysqlTypesAggRow + return new GetMysqlTypesCntRow { Cnt = reader.GetInt64(0), CBool = reader.IsDBNull(1) ? null : reader.GetBoolean(1), diff --git a/examples/MySqlConnectorLegacyExample/QuerySql.cs b/examples/MySqlConnectorLegacyExample/QuerySql.cs index a1199951..54563ead 100644 --- a/examples/MySqlConnectorLegacyExample/QuerySql.cs +++ b/examples/MySqlConnectorLegacyExample/QuerySql.cs @@ -720,8 +720,8 @@ public async Task GetMysqlTypes() return null; } - private const string GetMysqlTypesAggSql = "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float , c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob FROM mysql_types GROUP BY c_bool , c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob LIMIT 1 "; - public class GetMysqlTypesAggRow + private const string GetMysqlTypesCntSql = "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float , c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob FROM mysql_types GROUP BY c_bool , c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, c_year, c_date, c_datetime, c_timestamp, c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob LIMIT 1 "; + public class GetMysqlTypesCntRow { public long Cnt { get; set; } public bool? CBool { get; set; } @@ -760,18 +760,18 @@ public class GetMysqlTypesAggRow public byte[] CMediumblob { get; set; } public byte[] CLongblob { get; set; } }; - public async Task GetMysqlTypesAgg() + public async Task GetMysqlTypesCnt() { using (var connection = new MySqlConnection(ConnectionString)) { await connection.OpenAsync(); - using (var command = new MySqlCommand(GetMysqlTypesAggSql, connection)) + using (var command = new MySqlCommand(GetMysqlTypesCntSql, connection)) { using (var reader = await command.ExecuteReaderAsync()) { if (await reader.ReadAsync()) { - return new GetMysqlTypesAggRow + return new GetMysqlTypesCntRow { Cnt = reader.GetInt64(0), CBool = reader.IsDBNull(1) ? (bool? )null : reader.GetBoolean(1), diff --git a/examples/NpgsqlDapperExample/QuerySql.cs b/examples/NpgsqlDapperExample/QuerySql.cs index fe6cc961..a930ce6a 100644 --- a/examples/NpgsqlDapperExample/QuerySql.cs +++ b/examples/NpgsqlDapperExample/QuerySql.cs @@ -494,8 +494,8 @@ public class GetPostgresTypesRow } } - private const string GetPostgresTypesAggSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; - public class GetPostgresTypesAggRow + private const string GetPostgresTypesCntSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; + public class GetPostgresTypesCntRow { public required long Cnt { get; init; } public short? CSmallint { get; init; } @@ -517,11 +517,11 @@ public class GetPostgresTypesAggRow public string? CText { get; init; } public byte[]? CBytea { get; init; } }; - public async Task GetPostgresTypesAgg() + public async Task GetPostgresTypesCnt() { using (var connection = new NpgsqlConnection(ConnectionString)) { - var result = await connection.QueryFirstOrDefaultAsync(GetPostgresTypesAggSql); + var result = await connection.QueryFirstOrDefaultAsync(GetPostgresTypesCntSql); return result; } } diff --git a/examples/NpgsqlDapperLegacyExample/QuerySql.cs b/examples/NpgsqlDapperLegacyExample/QuerySql.cs index eeed396d..65ca2528 100644 --- a/examples/NpgsqlDapperLegacyExample/QuerySql.cs +++ b/examples/NpgsqlDapperLegacyExample/QuerySql.cs @@ -495,8 +495,8 @@ public async Task GetPostgresTypes() } } - private const string GetPostgresTypesAggSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; - public class GetPostgresTypesAggRow + private const string GetPostgresTypesCntSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; + public class GetPostgresTypesCntRow { public long Cnt { get; set; } public short? CSmallint { get; set; } @@ -518,11 +518,11 @@ public class GetPostgresTypesAggRow public string CText { get; set; } public byte[] CBytea { get; set; } }; - public async Task GetPostgresTypesAgg() + public async Task GetPostgresTypesCnt() { using (var connection = new NpgsqlConnection(ConnectionString)) { - var result = await connection.QueryFirstOrDefaultAsync(GetPostgresTypesAggSql); + var result = await connection.QueryFirstOrDefaultAsync(GetPostgresTypesCntSql); return result; } } diff --git a/examples/NpgsqlExample/QuerySql.cs b/examples/NpgsqlExample/QuerySql.cs index 2d0e1c7a..201705ab 100644 --- a/examples/NpgsqlExample/QuerySql.cs +++ b/examples/NpgsqlExample/QuerySql.cs @@ -463,19 +463,19 @@ public async Task InsertPostgresTypesBatch(List ar return null; } - private const string GetPostgresTypesAggSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; - public readonly record struct GetPostgresTypesAggRow(long Cnt, short? CSmallint, bool? CBoolean, int? CInteger, long? CBigint, float? CReal, decimal? CNumeric, decimal? CDecimal, double? CDoublePrecision, decimal? CMoney, DateTime? CDate, TimeSpan? CTime, DateTime? CTimestamp, DateTime? CTimestampWithTz, string? CChar, string? CVarchar, string? CCharacterVarying, string? CText, byte[]? CBytea); - public async Task GetPostgresTypesAgg() + private const string GetPostgresTypesCntSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; + public readonly record struct GetPostgresTypesCntRow(long Cnt, short? CSmallint, bool? CBoolean, int? CInteger, long? CBigint, float? CReal, decimal? CNumeric, decimal? CDecimal, double? CDoublePrecision, decimal? CMoney, DateTime? CDate, TimeSpan? CTime, DateTime? CTimestamp, DateTime? CTimestampWithTz, string? CChar, string? CVarchar, string? CCharacterVarying, string? CText, byte[]? CBytea); + public async Task GetPostgresTypesCnt() { using (var connection = NpgsqlDataSource.Create(ConnectionString)) { - using (var command = connection.CreateCommand(GetPostgresTypesAggSql)) + using (var command = connection.CreateCommand(GetPostgresTypesCntSql)) { using (var reader = await command.ExecuteReaderAsync()) { if (await reader.ReadAsync()) { - return new GetPostgresTypesAggRow + return new GetPostgresTypesCntRow { Cnt = reader.GetInt64(0), CSmallint = reader.IsDBNull(1) ? null : reader.GetInt16(1), diff --git a/examples/NpgsqlLegacyExample/QuerySql.cs b/examples/NpgsqlLegacyExample/QuerySql.cs index 6b8fbaa0..eff5b33b 100644 --- a/examples/NpgsqlLegacyExample/QuerySql.cs +++ b/examples/NpgsqlLegacyExample/QuerySql.cs @@ -624,8 +624,8 @@ public async Task GetPostgresTypes() return null; } - private const string GetPostgresTypesAggSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; - public class GetPostgresTypesAggRow + private const string GetPostgresTypesCntSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; + public class GetPostgresTypesCntRow { public long Cnt { get; set; } public short? CSmallint { get; set; } @@ -647,17 +647,17 @@ public class GetPostgresTypesAggRow public string CText { get; set; } public byte[] CBytea { get; set; } }; - public async Task GetPostgresTypesAgg() + public async Task GetPostgresTypesCnt() { using (var connection = NpgsqlDataSource.Create(ConnectionString)) { - using (var command = connection.CreateCommand(GetPostgresTypesAggSql)) + using (var command = connection.CreateCommand(GetPostgresTypesCntSql)) { using (var reader = await command.ExecuteReaderAsync()) { if (await reader.ReadAsync()) { - return new GetPostgresTypesAggRow + return new GetPostgresTypesCntRow { Cnt = reader.GetInt64(0), CSmallint = reader.IsDBNull(1) ? (short? )null : reader.GetInt16(1), diff --git a/examples/SqliteDapperExample/QuerySql.cs b/examples/SqliteDapperExample/QuerySql.cs index 8acc4c2f..ce199e7b 100644 --- a/examples/SqliteDapperExample/QuerySql.cs +++ b/examples/SqliteDapperExample/QuerySql.cs @@ -410,8 +410,8 @@ public class GetSqliteTypesRow } } - private const string GetSqliteTypesAggSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; - public class GetSqliteTypesAggRow + private const string GetSqliteTypesCntSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; + public class GetSqliteTypesCntRow { public required int Cnt { get; init; } public int? CInteger { get; init; } @@ -419,11 +419,11 @@ public class GetSqliteTypesAggRow public string? CText { get; init; } public byte[]? CBlob { get; init; } }; - public async Task GetSqliteTypesAgg() + public async Task GetSqliteTypesCnt() { using (var connection = new SqliteConnection(ConnectionString)) { - var result = await connection.QueryFirstOrDefaultAsync(GetSqliteTypesAggSql); + var result = await connection.QueryFirstOrDefaultAsync(GetSqliteTypesCntSql); return result; } } diff --git a/examples/SqliteDapperLegacyExample/QuerySql.cs b/examples/SqliteDapperLegacyExample/QuerySql.cs index 7a7735b7..efe4f666 100644 --- a/examples/SqliteDapperLegacyExample/QuerySql.cs +++ b/examples/SqliteDapperLegacyExample/QuerySql.cs @@ -411,8 +411,8 @@ public async Task GetSqliteTypes() } } - private const string GetSqliteTypesAggSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; - public class GetSqliteTypesAggRow + private const string GetSqliteTypesCntSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; + public class GetSqliteTypesCntRow { public int Cnt { get; set; } public int? CInteger { get; set; } @@ -420,11 +420,11 @@ public class GetSqliteTypesAggRow public string CText { get; set; } public byte[] CBlob { get; set; } }; - public async Task GetSqliteTypesAgg() + public async Task GetSqliteTypesCnt() { using (var connection = new SqliteConnection(ConnectionString)) { - var result = await connection.QueryFirstOrDefaultAsync(GetSqliteTypesAggSql); + var result = await connection.QueryFirstOrDefaultAsync(GetSqliteTypesCntSql); return result; } } diff --git a/examples/SqliteExample/QuerySql.cs b/examples/SqliteExample/QuerySql.cs index e8201b25..dcb0c39a 100644 --- a/examples/SqliteExample/QuerySql.cs +++ b/examples/SqliteExample/QuerySql.cs @@ -419,20 +419,20 @@ public async Task InsertSqliteTypesBatch(List args) return null; } - private const string GetSqliteTypesAggSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; - public readonly record struct GetSqliteTypesAggRow(int Cnt, int? CInteger, decimal? CReal, string? CText, byte[]? CBlob); - public async Task GetSqliteTypesAgg() + private const string GetSqliteTypesCntSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; + public readonly record struct GetSqliteTypesCntRow(int Cnt, int? CInteger, decimal? CReal, string? CText, byte[]? CBlob); + public async Task GetSqliteTypesCnt() { using (var connection = new SqliteConnection(ConnectionString)) { await connection.OpenAsync(); - using (var command = new SqliteCommand(GetSqliteTypesAggSql, connection)) + using (var command = new SqliteCommand(GetSqliteTypesCntSql, connection)) { using (var reader = await command.ExecuteReaderAsync()) { if (await reader.ReadAsync()) { - return new GetSqliteTypesAggRow + return new GetSqliteTypesCntRow { Cnt = reader.GetInt32(0), CInteger = reader.IsDBNull(1) ? null : reader.GetInt32(1), diff --git a/examples/SqliteLegacyExample/QuerySql.cs b/examples/SqliteLegacyExample/QuerySql.cs index 64ed75db..b0a27a90 100644 --- a/examples/SqliteLegacyExample/QuerySql.cs +++ b/examples/SqliteLegacyExample/QuerySql.cs @@ -525,8 +525,8 @@ public async Task GetSqliteTypes() return null; } - private const string GetSqliteTypesAggSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; - public class GetSqliteTypesAggRow + private const string GetSqliteTypesCntSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; + public class GetSqliteTypesCntRow { public int Cnt { get; set; } public int? CInteger { get; set; } @@ -534,18 +534,18 @@ public class GetSqliteTypesAggRow public string CText { get; set; } public byte[] CBlob { get; set; } }; - public async Task GetSqliteTypesAgg() + public async Task GetSqliteTypesCnt() { using (var connection = new SqliteConnection(ConnectionString)) { await connection.OpenAsync(); - using (var command = new SqliteCommand(GetSqliteTypesAggSql, connection)) + using (var command = new SqliteCommand(GetSqliteTypesCntSql, connection)) { using (var reader = await command.ExecuteReaderAsync()) { if (await reader.ReadAsync()) { - return new GetSqliteTypesAggRow + return new GetSqliteTypesCntRow { Cnt = reader.GetInt32(0), CInteger = reader.IsDBNull(1) ? (int? )null : reader.GetInt32(1), diff --git a/examples/config/mysql/query.sql b/examples/config/mysql/query.sql index 942a93bf..b2e34fa7 100644 --- a/examples/config/mysql/query.sql +++ b/examples/config/mysql/query.sql @@ -72,7 +72,7 @@ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, -- name: GetMysqlTypes :one SELECT * FROM mysql_types LIMIT 1; --- name: GetMysqlTypesAgg :one +-- name: GetMysqlTypesCnt :one SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum, diff --git a/examples/config/postgresql/query.sql b/examples/config/postgresql/query.sql index efaeb9dc..0585f159 100644 --- a/examples/config/postgresql/query.sql +++ b/examples/config/postgresql/query.sql @@ -69,7 +69,7 @@ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, -- name: GetPostgresTypes :one SELECT * FROM postgres_types LIMIT 1; --- name: GetPostgresTypesAgg :one +-- name: GetPostgresTypesCnt :one SELECT COUNT(1) AS cnt , c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, diff --git a/examples/config/sqlite/query.sql b/examples/config/sqlite/query.sql index 325838e1..eb022187 100644 --- a/examples/config/sqlite/query.sql +++ b/examples/config/sqlite/query.sql @@ -60,7 +60,7 @@ INSERT INTO types_sqlite (c_integer, c_real, c_text) VALUES (?, ?, ?); -- name: GetSqliteTypes :one SELECT * FROM types_sqlite LIMIT 1; --- name: GetSqliteTypesAgg :one +-- name: GetSqliteTypesCnt :one SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer, c_real, c_text, c_blob From 4f353c802efc28680bd49b869d8a0cdfa5ba9bb3 Mon Sep 17 00:00:00 2001 From: Ilan Uzan Date: Sun, 29 Jun 2025 15:17:59 +0200 Subject: [PATCH 02/11] feat: support data type override in plugin options --- CodeGenerator/Generators/DataClassesGen.cs | 14 +- CodeGenerator/Generators/QueriesGen.cs | 2 +- CodegenTests/CodegenTypeOverrideTests.cs | 44 ++++++ Drivers/DbDriver.cs | 43 +++++- Drivers/Generators/CommonGen.cs | 24 +-- Drivers/Generators/ManyDeclareGen.cs | 2 +- Drivers/Generators/OneDeclareGen.cs | 2 +- Drivers/MySqlConnectorDriver.cs | 8 +- Drivers/NpgsqlDriver.cs | 10 +- Drivers/SqliteDriver.cs | 6 + PluginOptions/Options.cs | 3 + PluginOptions/RawOptions.cs | 19 +++ end2end/EndToEndTestsLegacy/GlobalSetup.cs | 1 - .../MySqlConnectorDapperExample/QuerySql.cs | 17 ++ .../QuerySql.cs | 17 ++ examples/MySqlConnectorExample/QuerySql.cs | 28 ++++ .../MySqlConnectorLegacyExample/QuerySql.cs | 34 ++++ examples/NpgsqlDapperExample/QuerySql.cs | 16 ++ .../NpgsqlDapperLegacyExample/QuerySql.cs | 16 ++ examples/NpgsqlExample/QuerySql.cs | 26 ++++ examples/NpgsqlLegacyExample/QuerySql.cs | 31 ++++ examples/SqliteDapperExample/QuerySql.cs | 15 ++ .../SqliteDapperLegacyExample/QuerySql.cs | 15 ++ examples/SqliteExample/QuerySql.cs | 26 ++++ examples/SqliteLegacyExample/QuerySql.cs | 30 ++++ examples/config/mysql/query.sql | 4 + examples/config/postgresql/query.sql | 4 + examples/config/sqlite/query.sql | 4 + sqlc.ci.yaml | 124 ++++++++++++++- sqlc.local.yaml | 146 ++++++++++++++++-- 30 files changed, 681 insertions(+), 50 deletions(-) create mode 100644 CodegenTests/CodegenTypeOverrideTests.cs diff --git a/CodeGenerator/Generators/DataClassesGen.cs b/CodeGenerator/Generators/DataClassesGen.cs index ee52840a..53078d61 100644 --- a/CodeGenerator/Generators/DataClassesGen.cs +++ b/CodeGenerator/Generators/DataClassesGen.cs @@ -10,24 +10,24 @@ namespace SqlcGenCsharp.Generators; internal class DataClassesGen(DbDriver dbDriver) { - public MemberDeclarationSyntax Generate(string name, ClassMember? classMember, IList columns, Options options) + public MemberDeclarationSyntax Generate(string name, ClassMember? classMember, IList columns, Options options, Query? query = null) { var className = classMember is null ? name : classMember.Value.Name(name); if (options.DotnetFramework.IsDotnetCore() && !options.UseDapper) - return GenerateAsRecord(className, columns); - return GenerateAsCLass(className, columns); + return GenerateAsRecord(className, columns, query); + return GenerateAsCLass(className, columns, query); } - private MemberDeclarationSyntax GenerateAsRecord(string className, IList columns) + private MemberDeclarationSyntax GenerateAsRecord(string className, IList columns, Query? query) { var seenEmbed = new Dictionary(); var recordParameters = columns - .Select(column => $"{dbDriver.GetCsharpType(column)} {GetFieldName(column, seenEmbed)}") + .Select(column => $"{dbDriver.GetCsharpType(column, query)} {GetFieldName(column, seenEmbed)}") .JoinByComma(); return ParseMemberDeclaration($"public readonly record struct {className} ({recordParameters});")!; } - private ClassDeclarationSyntax GenerateAsCLass(string className, IList columns) + private ClassDeclarationSyntax GenerateAsCLass(string className, IList columns, Query? query) { var modernDotnetSupported = dbDriver.Options.DotnetFramework.IsDotnetCore(); return ClassDeclaration(className) @@ -40,7 +40,7 @@ MemberDeclarationSyntax[] ColumnsToProperties() var seenEmbed = new Dictionary(); return columns.Select(column => { - var csharpType = dbDriver.GetCsharpType(column); + var csharpType = dbDriver.GetCsharpType(column, query); var optionalRequiredModifier = RequiredModifierNeeded(column) ? "required" : string.Empty; var setterMethod = modernDotnetSupported ? "init" : "set"; return ParseMemberDeclaration( diff --git a/CodeGenerator/Generators/QueriesGen.cs b/CodeGenerator/Generators/QueriesGen.cs index 84efcb2a..81b272ff 100644 --- a/CodeGenerator/Generators/QueriesGen.cs +++ b/CodeGenerator/Generators/QueriesGen.cs @@ -95,7 +95,7 @@ private IEnumerable GetMembersForSingleQuery(Query quer private MemberDeclarationSyntax? GetQueryParamsDataclass(Query query) { if (query.Params.Count <= 0) return null; - var columns = query.Params.Select(dbDriver.GetColumnFromParam).ToList(); + var columns = query.Params.Select(p => dbDriver.GetColumnFromParam(p, query)).ToList(); return DataClassesGen.Generate(query.Name, ClassMember.Args, columns, dbDriver.Options); } diff --git a/CodegenTests/CodegenTypeOverrideTests.cs b/CodegenTests/CodegenTypeOverrideTests.cs new file mode 100644 index 00000000..afe70395 --- /dev/null +++ b/CodegenTests/CodegenTypeOverrideTests.cs @@ -0,0 +1,44 @@ +using Google.Protobuf; +using Plugin; +using SqlcGenCsharp; +using System.Text; +using System.Xml; + +namespace CodegenTests; + +public class CodegenTypeOverrideTests +{ + private readonly Settings _postgresSettings = new() + { + Engine = "postgresql", + Codegen = new Codegen { Out = "DummyProject" } + }; + + private readonly Catalog _emptyCatalog = new() + { + Schemas = + { + new Schema + { + Name = string.Empty, + Tables = { Capacity = 0 }, + Enums = { Capacity = 0 }, + } + } + }; + + private CodeGenerator CodeGenerator { get; } = new(); + + [Test] + public void TestOverrideQueryColumnDataType() + { + var request = new GenerateRequest + { + Settings = _postgresSettings, + Catalog = _emptyCatalog, + PluginOptions = ByteString.CopyFrom("{\"overrides\":[{\"column\":\"GetPostgresFunctions:max_integer\",\"csharp_type\":{\"type\":\"int\"}},{\"column\":\"GetPostgresFunctions:max_varchar\",\"csharp_type\":{\"type\":\"string\"}},{\"column\":\"GetPostgresFunctions:max_timestamp\",\"csharp_type\":{\"type\":\"DateTime\"}}]}", Encoding.UTF8) + }; + + var response = CodeGenerator.Generate(request); + } +} \ No newline at end of file diff --git a/Drivers/DbDriver.cs b/Drivers/DbDriver.cs index 38539f96..62f0a0dc 100644 --- a/Drivers/DbDriver.cs +++ b/Drivers/DbDriver.cs @@ -130,13 +130,13 @@ public string AddNullableSuffixIfNeeded(string csharpType, bool notNull) return IsTypeNullable(csharpType) ? $"{csharpType}?" : csharpType; } - public string GetCsharpType(Column column) + public string GetCsharpType(Column column, Query? query) { - var csharpType = GetCsharpTypeWithoutNullableSuffix(column); + var csharpType = GetCsharpTypeWithoutNullableSuffix(column, query); return AddNullableSuffixIfNeeded(csharpType, column.NotNull); } - private string GetCsharpTypeWithoutNullableSuffix(Column column) + private string GetCsharpTypeWithoutNullableSuffix(Column column, Query? query) { if (column.EmbedTable != null) return column.EmbedTable.Name.ToModelName(column.EmbedTable.Schema, DefaultSchema); @@ -147,6 +147,13 @@ private string GetCsharpTypeWithoutNullableSuffix(Column column) if (IsEnumType(column)) return column.Type.Name.ToModelName(column.Table.Schema, DefaultSchema); + if (query is not null) + { + var foundOverride = FindOverrideForQueryColumn(query, column); + if (foundOverride is not null) + return foundOverride.CsharpType.Type; + } + foreach (var columnMapping in ColumnMappings .Where(columnMapping => DoesColumnMappingApply(columnMapping, column))) { @@ -177,7 +184,15 @@ private static bool DoesColumnMappingApply(ColumnMapping columnMapping, Column c return typeInfo.Length.Value == column.Length; } - public string GetColumnReader(Column column, int ordinal) + private string GetColumnReader(OverrideOption overrideOption, int ordinal) + { + var columnMapping = ColumnMappings.Find(c => c.CsharpType == overrideOption.CsharpType.Type); + if (columnMapping is not null) + return columnMapping.ReaderFn(ordinal); + throw new NotSupportedException($"Column {overrideOption.Column} has unsupported column type: {overrideOption.CsharpType.Type}"); + } + + public string GetColumnReader(Column column, int ordinal, Query? query) { if (IsEnumType(column)) { @@ -185,6 +200,13 @@ public string GetColumnReader(Column column, int ordinal) return $"{Variable.Reader.AsVarName()}.GetString({ordinal}).To{enumName}()"; } + if (query is not null) + { + var foundOverride = FindOverrideForQueryColumn(query, column); + if (foundOverride is not null) + return GetColumnReader(foundOverride, ordinal); + } + foreach (var columnMapping in ColumnMappings .Where(columnMapping => DoesColumnMappingApply(columnMapping, column))) { @@ -227,10 +249,10 @@ public string GetIdColumnType(Query query) var tableColumns = Tables[query.InsertIntoTable.Schema][query.InsertIntoTable.Name].Columns; var idColumn = tableColumns.First(c => c.Name.Equals("id", StringComparison.OrdinalIgnoreCase)); if (idColumn is not null) - return GetCsharpType(idColumn); + return GetCsharpType(idColumn, query); idColumn = tableColumns.First(c => c.Name.Contains("id", StringComparison.CurrentCultureIgnoreCase)); - return GetCsharpType(idColumn ?? tableColumns[0]); + return GetCsharpType(idColumn ?? tableColumns[0], query); } public virtual string[] GetLastIdStatement(Query query) @@ -243,10 +265,10 @@ public virtual string[] GetLastIdStatement(Query query) ]; } - public Column GetColumnFromParam(Parameter queryParam) + public Column GetColumnFromParam(Parameter queryParam, Query query) { if (string.IsNullOrEmpty(queryParam.Column.Name)) - queryParam.Column.Name = $"{GetCsharpType(queryParam.Column).Replace("[]", "Arr")}_{queryParam.Number}"; + queryParam.Column.Name = $"{GetCsharpType(queryParam.Column, query).Replace("[]", "Arr")}_{queryParam.Number}"; return queryParam.Column; } @@ -262,4 +284,9 @@ protected bool BatchQueryExists() { return Queries.Any(q => q.Cmd is ":copyfrom"); } + + private OverrideOption? FindOverrideForQueryColumn(Query query, Column column) + { + return Options.Overrides.FirstOrDefault(o => o.Column.Equals($"{query.Name}:{column.Name}")); + } } \ No newline at end of file diff --git a/Drivers/Generators/CommonGen.cs b/Drivers/Generators/CommonGen.cs index cfdea6d0..613b4ac2 100644 --- a/Drivers/Generators/CommonGen.cs +++ b/Drivers/Generators/CommonGen.cs @@ -92,7 +92,7 @@ public static string GetSqlTransformations(Query query, string queryTextConstant """; } - public string InstantiateDataclass(Column[] columns, string returnInterface) + public string InstantiateDataclass(Column[] columns, string returnInterface, Query? query) { var columnsInit = new List(); var actualOrdinal = 0; @@ -102,7 +102,7 @@ public string InstantiateDataclass(Column[] columns, string returnInterface) { if (column.EmbedTable is null) { - columnsInit.Add(GetAsSimpleAssignment(column, actualOrdinal)); + columnsInit.Add(GetAsSimpleAssignment(column, actualOrdinal, query)); actualOrdinal++; continue; } @@ -113,38 +113,38 @@ public string InstantiateDataclass(Column[] columns, string returnInterface) seenEmbed.TryAdd(tableFieldType, 1); seenEmbed[tableFieldType]++; - var tableColumnsInit = GetAsEmbeddedTableColumnAssignment(column, actualOrdinal); + var tableColumnsInit = GetAsEmbeddedTableColumnAssignment(column, actualOrdinal, query); columnsInit.Add($"{tableFieldName} = {InstantiateDataclassInternal(tableFieldType, tableColumnsInit)}"); actualOrdinal += tableColumnsInit.Length; } return InstantiateDataclassInternal(returnInterface, columnsInit); - string[] GetAsEmbeddedTableColumnAssignment(Column tableColumn, int ordinal) + string[] GetAsEmbeddedTableColumnAssignment(Column tableColumn, int ordinal, Query? query) { var schemaName = tableColumn.EmbedTable.Schema == dbDriver.DefaultSchema ? string.Empty : tableColumn.EmbedTable.Schema; var tableColumns = dbDriver.Tables[schemaName][tableColumn.EmbedTable.Name].Columns; return tableColumns - .Select((c, o) => GetAsSimpleAssignment(c, o + ordinal)) + .Select((c, o) => GetAsSimpleAssignment(c, o + ordinal, query)) .ToArray(); } - string GetAsSimpleAssignment(Column column, int ordinal) + string GetAsSimpleAssignment(Column column, int ordinal, Query query) { - var readExpression = GetReadExpression(column, ordinal); + var readExpression = GetReadExpression(column, ordinal, query); return $"{column.Name.ToPascalCase()} = {readExpression}"; } - string GetReadExpression(Column column, int ordinal) + string GetReadExpression(Column column, int ordinal, Query query) { return column.NotNull - ? dbDriver.GetColumnReader(column, ordinal) - : $"{CheckNullExpression(ordinal)} ? {GetNullExpression(column)} : {dbDriver.GetColumnReader(column, ordinal)}"; + ? dbDriver.GetColumnReader(column, ordinal, query) + : $"{CheckNullExpression(ordinal)} ? {GetNullExpression(column, query)} : {dbDriver.GetColumnReader(column, ordinal, query)}"; } - string GetNullExpression(Column column) + string GetNullExpression(Column column, Query? query) { - var csharpType = dbDriver.GetCsharpType(column); + var csharpType = dbDriver.GetCsharpType(column, query); if (dbDriver.Options.DotnetFramework.IsDotnetCore()) return "null"; return dbDriver.IsTypeNullable(csharpType) ? $"({csharpType}) null" : "null"; } diff --git a/Drivers/Generators/ManyDeclareGen.cs b/Drivers/Generators/ManyDeclareGen.cs index 61484bbd..d7dba854 100644 --- a/Drivers/Generators/ManyDeclareGen.cs +++ b/Drivers/Generators/ManyDeclareGen.cs @@ -54,7 +54,7 @@ string GetAsDriver() var commandParameters = CommonGen.AddParametersToCommand(query.Params); var initDataReader = CommonGen.InitDataReader(); var awaitReaderRow = CommonGen.AwaitReaderRow(); - var dataclassInit = CommonGen.InstantiateDataclass(query.Columns.ToArray(), returnInterface); + var dataclassInit = CommonGen.InstantiateDataclass(query.Columns.ToArray(), returnInterface, query); var readWhileExists = $$""" while ({{awaitReaderRow}}) { diff --git a/Drivers/Generators/OneDeclareGen.cs b/Drivers/Generators/OneDeclareGen.cs index d28a6a41..1156e7b1 100644 --- a/Drivers/Generators/OneDeclareGen.cs +++ b/Drivers/Generators/OneDeclareGen.cs @@ -54,7 +54,7 @@ string GetAsDriver() var commandParameters = CommonGen.AddParametersToCommand(query.Params); var initDataReader = CommonGen.InitDataReader(); var awaitReaderRow = CommonGen.AwaitReaderRow(); - var returnDataclass = CommonGen.InstantiateDataclass(query.Columns.ToArray(), returnInterface); + var returnDataclass = CommonGen.InstantiateDataclass(query.Columns.ToArray(), returnInterface, query); return $$""" using ({{establishConnection}}) { diff --git a/Drivers/MySqlConnectorDriver.cs b/Drivers/MySqlConnectorDriver.cs index db741492..084fac04 100644 --- a/Drivers/MySqlConnectorDriver.cs +++ b/Drivers/MySqlConnectorDriver.cs @@ -92,7 +92,13 @@ public partial class MySqlConnectorDriver( new Dictionary { { "decimal", new DbTypeInfo() } - }, ordinal => $"reader.GetDecimal({ordinal})") + }, ordinal => $"reader.GetDecimal({ordinal})"), + // last item in the dictionary - enforce TODO + new("object", + new Dictionary + { + { "any", new DbTypeInfo() } + }, ordinal => $"reader.GetValue({ordinal})") ]; public override UsingDirectiveSyntax[] GetUsingDirectivesForQueries() diff --git a/Drivers/NpgsqlDriver.cs b/Drivers/NpgsqlDriver.cs index d0d68a25..7a053ce4 100644 --- a/Drivers/NpgsqlDriver.cs +++ b/Drivers/NpgsqlDriver.cs @@ -150,7 +150,13 @@ public NpgsqlDriver( new Dictionary { { "circle", new DbTypeInfo(NpgsqlTypeOverride: "NpgsqlDbType.Circle") } - }, ordinal => $"reader.GetFieldValue({ordinal})") + }, ordinal => $"reader.GetFieldValue({ordinal})"), + // last item in the dictionary - enforce TODO + new("object", + new Dictionary + { + { "anyarray", new DbTypeInfo() } + }, ordinal => $"reader.GetValue({ordinal})") ]; public override UsingDirectiveSyntax[] GetUsingDirectivesForQueries() @@ -286,7 +292,7 @@ public override string TransformQueryText(Query query) for (var i = 0; i < query.Params.Count; i++) { var currentParameter = query.Params[i]; - var column = GetColumnFromParam(currentParameter); + var column = GetColumnFromParam(currentParameter, query); queryText = Regex.Replace(queryText, $@"\$\s*{i + 1}\b", $"@{column.Name}"); } diff --git a/Drivers/SqliteDriver.cs b/Drivers/SqliteDriver.cs index dccfdf7e..b720dba4 100644 --- a/Drivers/SqliteDriver.cs +++ b/Drivers/SqliteDriver.cs @@ -37,6 +37,12 @@ public partial class SqliteDriver( { {"real", new DbTypeInfo()} }, ordinal => $"reader.GetDecimal({ordinal})"), + // last item in the dictionary - enforce TODO + new("object", + new Dictionary + { + { "any", new DbTypeInfo() } + }, ordinal => $"reader.GetValue({ordinal})") ]; public override UsingDirectiveSyntax[] GetUsingDirectivesForQueries() diff --git a/PluginOptions/Options.cs b/PluginOptions/Options.cs index 744711a1..28a737df 100644 --- a/PluginOptions/Options.cs +++ b/PluginOptions/Options.cs @@ -20,6 +20,7 @@ public Options(GenerateRequest generateRequest) OverrideDapperVersion = rawOptions.OverrideDapperVersion; NamespaceName = rawOptions.NamespaceName; DotnetFramework = DotnetFrameworkExtensions.ParseName(rawOptions.TargetFramework); + Overrides = rawOptions.Overrides ?? []; if (rawOptions.DebugRequest && generateRequest.Settings.Codegen.Wasm is not null) throw new ArgumentException("Debug request mode cannot be used with WASM plugin"); @@ -40,6 +41,8 @@ public Options(GenerateRequest generateRequest) public string NamespaceName { get; } + public List Overrides { get; } + public bool DebugRequest { get; } private static readonly Dictionary EngineToDriverMapping = new() diff --git a/PluginOptions/RawOptions.cs b/PluginOptions/RawOptions.cs index 3e9e6277..f2ea280b 100644 --- a/PluginOptions/RawOptions.cs +++ b/PluginOptions/RawOptions.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Text.Json.Serialization; namespace SqlcGenCsharp; @@ -22,6 +23,24 @@ internal class RawOptions [JsonPropertyName("overrideDapperVersion")] public string OverrideDapperVersion { get; init; } = string.Empty; + [JsonPropertyName("overrides")] + public List? Overrides { get; init; } + [JsonPropertyName("debugRequest")] public bool DebugRequest { get; init; } +} + +public class OverrideOption +{ + [JsonPropertyName("column")] + public string Column { get; init; } = string.Empty; + + [JsonPropertyName("csharp_type")] + public CsharpTypeOption CsharpType { get; init; } = new(); +} + +public class CsharpTypeOption +{ + [JsonPropertyName("type")] + public string Type { get; init; } = string.Empty; } \ No newline at end of file diff --git a/end2end/EndToEndTestsLegacy/GlobalSetup.cs b/end2end/EndToEndTestsLegacy/GlobalSetup.cs index 34164c8a..28a165d3 100644 --- a/end2end/EndToEndTestsLegacy/GlobalSetup.cs +++ b/end2end/EndToEndTestsLegacy/GlobalSetup.cs @@ -1,4 +1,3 @@ -using EndToEndTests; using NUnit.Framework; namespace EndToEndTests diff --git a/examples/MySqlConnectorDapperExample/QuerySql.cs b/examples/MySqlConnectorDapperExample/QuerySql.cs index 4ee445f4..fe0ca15c 100644 --- a/examples/MySqlConnectorDapperExample/QuerySql.cs +++ b/examples/MySqlConnectorDapperExample/QuerySql.cs @@ -623,6 +623,23 @@ public class GetMysqlTypesCntRow } } + private const string GetMysqlFunctionsSql = "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint FROM mysql_types ; SELECT LAST_INSERT_ID ( ) "; + public class GetMysqlFunctionsRow + { + public required object MaxInt { get; init; } + public required object MaxVarchar { get; init; } + public required object MaxTimestamp { get; init; } + public required object MaxBigint { get; init; } + }; + public async Task GetMysqlFunctions() + { + using (var connection = new MySqlConnection(ConnectionString)) + { + var result = await connection.QueryFirstOrDefaultAsync(GetMysqlFunctionsSql); + return result; + } + } + private const string TruncateMysqlTypesSql = "TRUNCATE TABLE mysql_types; SELECT LAST_INSERT_ID()"; public async Task TruncateMysqlTypes() { diff --git a/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs b/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs index 6caee42b..051176ec 100644 --- a/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs +++ b/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs @@ -623,6 +623,23 @@ public async Task GetMysqlTypesCnt() } } + private const string GetMysqlFunctionsSql = "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint FROM mysql_types ; SELECT LAST_INSERT_ID ( ) "; + public class GetMysqlFunctionsRow + { + public object MaxInt { get; set; } + public object MaxVarchar { get; set; } + public object MaxTimestamp { get; set; } + public object MaxBigint { get; set; } + }; + public async Task GetMysqlFunctions() + { + using (var connection = new MySqlConnection(ConnectionString)) + { + var result = await connection.QueryFirstOrDefaultAsync(GetMysqlFunctionsSql); + return result; + } + } + private const string TruncateMysqlTypesSql = "TRUNCATE TABLE mysql_types; SELECT LAST_INSERT_ID()"; public async Task TruncateMysqlTypes() { diff --git a/examples/MySqlConnectorExample/QuerySql.cs b/examples/MySqlConnectorExample/QuerySql.cs index 54106f8d..a560013d 100644 --- a/examples/MySqlConnectorExample/QuerySql.cs +++ b/examples/MySqlConnectorExample/QuerySql.cs @@ -586,6 +586,34 @@ public async Task InsertMysqlTypesBatch(List args) return null; } + private const string GetMysqlFunctionsSql = "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint FROM mysql_types "; + public readonly record struct GetMysqlFunctionsRow(object MaxInt, object MaxVarchar, object MaxTimestamp, object MaxBigint); + public async Task GetMysqlFunctions() + { + using (var connection = new MySqlConnection(ConnectionString)) + { + await connection.OpenAsync(); + using (var command = new MySqlCommand(GetMysqlFunctionsSql, connection)) + { + using (var reader = await command.ExecuteReaderAsync()) + { + if (await reader.ReadAsync()) + { + return new GetMysqlFunctionsRow + { + MaxInt = reader.GetInt32(0), + MaxVarchar = reader.GetString(1), + MaxTimestamp = reader.GetDateTime(2), + MaxBigint = reader.GetInt64(3) + }; + } + } + } + } + + return null; + } + private const string TruncateMysqlTypesSql = "TRUNCATE TABLE mysql_types"; public async Task TruncateMysqlTypes() { diff --git a/examples/MySqlConnectorLegacyExample/QuerySql.cs b/examples/MySqlConnectorLegacyExample/QuerySql.cs index 54563ead..6396d91d 100644 --- a/examples/MySqlConnectorLegacyExample/QuerySql.cs +++ b/examples/MySqlConnectorLegacyExample/QuerySql.cs @@ -818,6 +818,40 @@ public async Task GetMysqlTypesCnt() return null; } + private const string GetMysqlFunctionsSql = "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint FROM mysql_types "; + public class GetMysqlFunctionsRow + { + public object MaxInt { get; set; } + public object MaxVarchar { get; set; } + public object MaxTimestamp { get; set; } + public object MaxBigint { get; set; } + }; + public async Task GetMysqlFunctions() + { + using (var connection = new MySqlConnection(ConnectionString)) + { + await connection.OpenAsync(); + using (var command = new MySqlCommand(GetMysqlFunctionsSql, connection)) + { + using (var reader = await command.ExecuteReaderAsync()) + { + if (await reader.ReadAsync()) + { + return new GetMysqlFunctionsRow + { + MaxInt = reader.GetInt32(0), + MaxVarchar = reader.GetString(1), + MaxTimestamp = reader.GetDateTime(2), + MaxBigint = reader.GetInt64(3) + }; + } + } + } + } + + return null; + } + private const string TruncateMysqlTypesSql = "TRUNCATE TABLE mysql_types"; public async Task TruncateMysqlTypes() { diff --git a/examples/NpgsqlDapperExample/QuerySql.cs b/examples/NpgsqlDapperExample/QuerySql.cs index a930ce6a..906fb00d 100644 --- a/examples/NpgsqlDapperExample/QuerySql.cs +++ b/examples/NpgsqlDapperExample/QuerySql.cs @@ -526,6 +526,22 @@ public class GetPostgresTypesCntRow } } + private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; + public class GetPostgresFunctionsRow + { + public required object MaxInteger { get; init; } + public required object MaxVarchar { get; init; } + public required object MaxTimestamp { get; init; } + }; + public async Task GetPostgresFunctions() + { + using (var connection = new NpgsqlConnection(ConnectionString)) + { + var result = await connection.QueryFirstOrDefaultAsync(GetPostgresFunctionsSql); + return result; + } + } + private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle) VALUES ( @c_point , @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; public class InsertPostgresGeoTypesArgs { diff --git a/examples/NpgsqlDapperLegacyExample/QuerySql.cs b/examples/NpgsqlDapperLegacyExample/QuerySql.cs index 65ca2528..13a43a35 100644 --- a/examples/NpgsqlDapperLegacyExample/QuerySql.cs +++ b/examples/NpgsqlDapperLegacyExample/QuerySql.cs @@ -527,6 +527,22 @@ public async Task GetPostgresTypesCnt() } } + private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; + public class GetPostgresFunctionsRow + { + public object MaxInteger { get; set; } + public object MaxVarchar { get; set; } + public object MaxTimestamp { get; set; } + }; + public async Task GetPostgresFunctions() + { + using (var connection = new NpgsqlConnection(ConnectionString)) + { + var result = await connection.QueryFirstOrDefaultAsync(GetPostgresFunctionsSql); + return result; + } + } + private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle) VALUES ( @c_point , @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; public class InsertPostgresGeoTypesArgs { diff --git a/examples/NpgsqlExample/QuerySql.cs b/examples/NpgsqlExample/QuerySql.cs index 201705ab..75a61dcf 100644 --- a/examples/NpgsqlExample/QuerySql.cs +++ b/examples/NpgsqlExample/QuerySql.cs @@ -505,6 +505,32 @@ public async Task InsertPostgresTypesBatch(List ar return null; } + private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; + public readonly record struct GetPostgresFunctionsRow(object MaxInteger, object MaxVarchar, object MaxTimestamp); + public async Task GetPostgresFunctions() + { + using (var connection = NpgsqlDataSource.Create(ConnectionString)) + { + using (var command = connection.CreateCommand(GetPostgresFunctionsSql)) + { + using (var reader = await command.ExecuteReaderAsync()) + { + if (await reader.ReadAsync()) + { + return new GetPostgresFunctionsRow + { + MaxInteger = reader.GetInt32(0), + MaxVarchar = reader.GetString(1), + MaxTimestamp = reader.GetDateTime(2) + }; + } + } + } + } + + return null; + } + private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle) VALUES ( @c_point , @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; public readonly record struct InsertPostgresGeoTypesArgs(NpgsqlPoint? CPoint, NpgsqlLine? CLine, NpgsqlLSeg? CLseg, NpgsqlBox? CBox, NpgsqlPath? CPath, NpgsqlPolygon? CPolygon, NpgsqlCircle? CCircle); public async Task InsertPostgresGeoTypes(InsertPostgresGeoTypesArgs args) diff --git a/examples/NpgsqlLegacyExample/QuerySql.cs b/examples/NpgsqlLegacyExample/QuerySql.cs index eff5b33b..957e1d0d 100644 --- a/examples/NpgsqlLegacyExample/QuerySql.cs +++ b/examples/NpgsqlLegacyExample/QuerySql.cs @@ -687,6 +687,37 @@ public async Task GetPostgresTypesCnt() return null; } + private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; + public class GetPostgresFunctionsRow + { + public object MaxInteger { get; set; } + public object MaxVarchar { get; set; } + public object MaxTimestamp { get; set; } + }; + public async Task GetPostgresFunctions() + { + using (var connection = NpgsqlDataSource.Create(ConnectionString)) + { + using (var command = connection.CreateCommand(GetPostgresFunctionsSql)) + { + using (var reader = await command.ExecuteReaderAsync()) + { + if (await reader.ReadAsync()) + { + return new GetPostgresFunctionsRow + { + MaxInteger = reader.GetInt32(0), + MaxVarchar = reader.GetString(1), + MaxTimestamp = reader.GetDateTime(2) + }; + } + } + } + } + + return null; + } + private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle) VALUES ( @c_point , @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; public class InsertPostgresGeoTypesArgs { diff --git a/examples/SqliteDapperExample/QuerySql.cs b/examples/SqliteDapperExample/QuerySql.cs index ce199e7b..fa45d989 100644 --- a/examples/SqliteDapperExample/QuerySql.cs +++ b/examples/SqliteDapperExample/QuerySql.cs @@ -428,6 +428,21 @@ public class GetSqliteTypesCntRow } } + private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text FROM types_sqlite "; + public class GetSqliteFunctionsRow + { + public object? MaxInteger { get; init; } + public object? MaxText { get; init; } + }; + public async Task GetSqliteFunctions() + { + using (var connection = new SqliteConnection(ConnectionString)) + { + var result = await connection.QueryFirstOrDefaultAsync(GetSqliteFunctionsSql); + return result; + } + } + private const string DeleteAllSqliteTypesSql = "DELETE FROM types_sqlite"; public async Task DeleteAllSqliteTypes() { diff --git a/examples/SqliteDapperLegacyExample/QuerySql.cs b/examples/SqliteDapperLegacyExample/QuerySql.cs index efe4f666..2608a370 100644 --- a/examples/SqliteDapperLegacyExample/QuerySql.cs +++ b/examples/SqliteDapperLegacyExample/QuerySql.cs @@ -429,6 +429,21 @@ public async Task GetSqliteTypesCnt() } } + private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text FROM types_sqlite "; + public class GetSqliteFunctionsRow + { + public object MaxInteger { get; set; } + public object MaxText { get; set; } + }; + public async Task GetSqliteFunctions() + { + using (var connection = new SqliteConnection(ConnectionString)) + { + var result = await connection.QueryFirstOrDefaultAsync(GetSqliteFunctionsSql); + return result; + } + } + private const string DeleteAllSqliteTypesSql = "DELETE FROM types_sqlite"; public async Task DeleteAllSqliteTypes() { diff --git a/examples/SqliteExample/QuerySql.cs b/examples/SqliteExample/QuerySql.cs index dcb0c39a..faeba5eb 100644 --- a/examples/SqliteExample/QuerySql.cs +++ b/examples/SqliteExample/QuerySql.cs @@ -448,6 +448,32 @@ public async Task InsertSqliteTypesBatch(List args) return null; } + private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text FROM types_sqlite "; + public readonly record struct GetSqliteFunctionsRow(object? MaxInteger, object? MaxText); + public async Task GetSqliteFunctions() + { + using (var connection = new SqliteConnection(ConnectionString)) + { + await connection.OpenAsync(); + using (var command = new SqliteCommand(GetSqliteFunctionsSql, connection)) + { + using (var reader = await command.ExecuteReaderAsync()) + { + if (await reader.ReadAsync()) + { + return new GetSqliteFunctionsRow + { + MaxInteger = reader.IsDBNull(0) ? null : reader.GetInt32(0), + MaxText = reader.IsDBNull(1) ? null : reader.GetValue(1) + }; + } + } + } + } + + return null; + } + private const string DeleteAllSqliteTypesSql = "DELETE FROM types_sqlite"; public async Task DeleteAllSqliteTypes() { diff --git a/examples/SqliteLegacyExample/QuerySql.cs b/examples/SqliteLegacyExample/QuerySql.cs index b0a27a90..cb652c75 100644 --- a/examples/SqliteLegacyExample/QuerySql.cs +++ b/examples/SqliteLegacyExample/QuerySql.cs @@ -561,6 +561,36 @@ public async Task GetSqliteTypesCnt() return null; } + private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text FROM types_sqlite "; + public class GetSqliteFunctionsRow + { + public object MaxInteger { get; set; } + public object MaxText { get; set; } + }; + public async Task GetSqliteFunctions() + { + using (var connection = new SqliteConnection(ConnectionString)) + { + await connection.OpenAsync(); + using (var command = new SqliteCommand(GetSqliteFunctionsSql, connection)) + { + using (var reader = await command.ExecuteReaderAsync()) + { + if (await reader.ReadAsync()) + { + return new GetSqliteFunctionsRow + { + MaxInteger = reader.IsDBNull(0) ? (int? )null : reader.GetInt32(0), + MaxText = reader.IsDBNull(1) ? null : reader.GetValue(1) + }; + } + } + } + } + + return null; + } + private const string DeleteAllSqliteTypesSql = "DELETE FROM types_sqlite"; public async Task DeleteAllSqliteTypes() { diff --git a/examples/config/mysql/query.sql b/examples/config/mysql/query.sql index b2e34fa7..e6787cbc 100644 --- a/examples/config/mysql/query.sql +++ b/examples/config/mysql/query.sql @@ -86,6 +86,10 @@ GROUP BY c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_ c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob LIMIT 1; +-- name: GetMysqlFunctions :one +SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint +FROM mysql_types; + -- name: TruncateMysqlTypes :exec TRUNCATE TABLE mysql_types; diff --git a/examples/config/postgresql/query.sql b/examples/config/postgresql/query.sql index d2087989..d5313639 100644 --- a/examples/config/postgresql/query.sql +++ b/examples/config/postgresql/query.sql @@ -80,6 +80,10 @@ GROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decima c_bytea LIMIT 1; +-- name: GetPostgresFunctions :one +SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp +FROM postgres_types; + -- name: InsertPostgresGeoTypes :exec INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle) VALUES ($1, $2, $3, $4, $5, $6, $7); diff --git a/examples/config/sqlite/query.sql b/examples/config/sqlite/query.sql index eb022187..c7489bf7 100644 --- a/examples/config/sqlite/query.sql +++ b/examples/config/sqlite/query.sql @@ -66,5 +66,9 @@ FROM types_sqlite GROUP BY c_integer, c_real, c_text, c_blob LIMIT 1; +-- name: GetSqliteFunctions :one +SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text +FROM types_sqlite; + -- name: DeleteAllSqliteTypes :exec DELETE FROM types_sqlite; \ No newline at end of file diff --git a/sqlc.ci.yaml b/sqlc.ci.yaml index aa9afdd8..07cf84f5 100644 --- a/sqlc.ci.yaml +++ b/sqlc.ci.yaml @@ -3,7 +3,7 @@ plugins: - name: csharp wasm: url: file://dist/plugin.wasm - sha256: SHA_TO_REPLACE + sha256: 8cbd0d3e392bf0ed85871e0f532a56063ecac7caff9c979255f56f8d92022874 sql: # PostgresSQL - schema: "examples/config/postgresql/schema.sql" @@ -17,6 +17,16 @@ sql: targetFramework: net8.0 generateCsproj: true namespaceName: NpgsqlExampleGen + overrides: + - column: "GetPostgresFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetPostgresFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetPostgresFunctions:max_timestamp" + csharp_type: + type: "DateTime" - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" engine: "postgresql" @@ -28,6 +38,16 @@ sql: targetFramework: net8.0 generateCsproj: true namespaceName: NpgsqlDapperExampleGen + overrides: + - column: "GetPostgresFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetPostgresFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetPostgresFunctions:max_timestamp" + csharp_type: + type: "DateTime" - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" engine: "postgresql" @@ -39,6 +59,16 @@ sql: targetFramework: netstandard2.0 generateCsproj: true namespaceName: NpgsqlLegacyExampleGen + overrides: + - column: "GetPostgresFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetPostgresFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetPostgresFunctions:max_timestamp" + csharp_type: + type: "DateTime" - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" engine: "postgresql" @@ -50,7 +80,16 @@ sql: targetFramework: netstandard2.0 generateCsproj: true namespaceName: NpgsqlDapperLegacyExampleGen - + overrides: + - column: "GetPostgresFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetPostgresFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetPostgresFunctions:max_timestamp" + csharp_type: + type: "DateTime" # MySQL - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" @@ -63,6 +102,19 @@ sql: targetFramework: net8.0 generateCsproj: true namespaceName: MySqlConnectorExampleGen + overrides: + - column: "GetMysqlFunctions:max_int" + csharp_type: + type: "int" + - column: "GetMysqlFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetMysqlFunctions:max_timestamp" + csharp_type: + type: "DateTime" + - column: "GetMysqlFunctions:max_bigint" + csharp_type: + type: "long" - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" engine: "mysql" @@ -74,6 +126,19 @@ sql: targetFramework: net8.0 generateCsproj: true namespaceName: MySqlConnectorDapperExampleGen + overrides: + - column: "GetMysqlFunctions:max_int" + csharp_type: + type: "int" + - column: "GetMysqlFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetMysqlFunctions:max_timestamp" + csharp_type: + type: "DateTime" + - column: "GetMysqlFunctions:max_bigint" + csharp_type: + type: "long" - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" engine: "mysql" @@ -85,6 +150,19 @@ sql: targetFramework: netstandard2.0 generateCsproj: true namespaceName: MySqlConnectorLegacyExampleGen + overrides: + - column: "GetMysqlFunctions:max_int" + csharp_type: + type: "int" + - column: "GetMysqlFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetMysqlFunctions:max_timestamp" + csharp_type: + type: "DateTime" + - column: "GetMysqlFunctions:max_bigint" + csharp_type: + type: "long" - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" engine: "mysql" @@ -96,7 +174,19 @@ sql: targetFramework: netstandard2.0 generateCsproj: true namespaceName: MySqlConnectorDapperLegacyExampleGen - + overrides: + - column: "GetMysqlFunctions:max_int" + csharp_type: + type: "int" + - column: "GetMysqlFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetMysqlFunctions:max_timestamp" + csharp_type: + type: "DateTime" + - column: "GetMysqlFunctions:max_bigint" + csharp_type: + type: "long" # Sqlite - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" @@ -109,6 +199,13 @@ sql: targetFramework: net8.0 generateCsproj: true namespaceName: SqliteExampleGen + overrides: + - column: "GetSqliteFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetSqliteFunctions:max_varchar" + csharp_type: + type: "string" - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" engine: "sqlite" @@ -120,6 +217,13 @@ sql: targetFramework: net8.0 generateCsproj: true namespaceName: SqliteDapperExampleGen + overrides: + - column: "GetSqliteFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetSqliteFunctions:max_varchar" + csharp_type: + type: "string" - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" engine: "sqlite" @@ -131,6 +235,13 @@ sql: targetFramework: netstandard2.0 generateCsproj: true namespaceName: SqliteLegacyExampleGen + overrides: + - column: "GetSqliteFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetSqliteFunctions:max_varchar" + csharp_type: + type: "string" - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" engine: "sqlite" @@ -142,3 +253,10 @@ sql: targetFramework: netstandard2.0 generateCsproj: true namespaceName: SqliteDapperLegacyExampleGen + overrides: + - column: "GetSqliteFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetSqliteFunctions:max_varchar" + csharp_type: + type: "string" diff --git a/sqlc.local.yaml b/sqlc.local.yaml index 4a5336e2..c2060f37 100644 --- a/sqlc.local.yaml +++ b/sqlc.local.yaml @@ -12,11 +12,21 @@ sql: - plugin: csharp out: examples/NpgsqlExample options: + debugRequest: true useDapper: false targetFramework: net8.0 generateCsproj: true namespaceName: NpgsqlExampleGen - debugRequest: true + overrides: + - column: "GetPostgresFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetPostgresFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetPostgresFunctions:max_timestamp" + csharp_type: + type: "DateTime" - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" engine: "postgresql" @@ -24,11 +34,21 @@ sql: - plugin: csharp out: examples/NpgsqlDapperExample options: + debugRequest: true useDapper: true targetFramework: net8.0 generateCsproj: true namespaceName: NpgsqlDapperExampleGen - debugRequest: true + overrides: + - column: "GetPostgresFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetPostgresFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetPostgresFunctions:max_timestamp" + csharp_type: + type: "DateTime" - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" engine: "postgresql" @@ -36,11 +56,21 @@ sql: - plugin: csharp out: examples/NpgsqlLegacyExample options: + debugRequest: true useDapper: false targetFramework: netstandard2.0 generateCsproj: true namespaceName: NpgsqlLegacyExampleGen - debugRequest: true + overrides: + - column: "GetPostgresFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetPostgresFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetPostgresFunctions:max_timestamp" + csharp_type: + type: "DateTime" - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" engine: "postgresql" @@ -48,12 +78,22 @@ sql: - plugin: csharp out: examples/NpgsqlDapperLegacyExample options: + debugRequest: true useDapper: true targetFramework: netstandard2.0 generateCsproj: true namespaceName: NpgsqlDapperLegacyExampleGen - debugRequest: true - + overrides: + - column: "GetPostgresFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetPostgresFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetPostgresFunctions:max_timestamp" + csharp_type: + type: "DateTime" + # MySQL - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" @@ -62,11 +102,24 @@ sql: - plugin: csharp out: examples/MySqlConnectorExample options: + debugRequest: true useDapper: false targetFramework: net8.0 generateCsproj: true namespaceName: MySqlConnectorExampleGen - debugRequest: true + overrides: + - column: "GetMysqlFunctions:max_int" + csharp_type: + type: "int" + - column: "GetMysqlFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetMysqlFunctions:max_timestamp" + csharp_type: + type: "DateTime" + - column: "GetMysqlFunctions:max_bigint" + csharp_type: + type: "long" - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" engine: "mysql" @@ -74,11 +127,24 @@ sql: - plugin: csharp out: examples/MySqlConnectorDapperExample options: + debugRequest: true useDapper: true targetFramework: net8.0 generateCsproj: true namespaceName: MySqlConnectorDapperExampleGen - debugRequest: true + overrides: + - column: "GetMysqlFunctions:max_int" + csharp_type: + type: "int" + - column: "GetMysqlFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetMysqlFunctions:max_timestamp" + csharp_type: + type: "DateTime" + - column: "GetMysqlFunctions:max_bigint" + csharp_type: + type: "long" - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" engine: "mysql" @@ -86,11 +152,24 @@ sql: - plugin: csharp out: examples/MySqlConnectorLegacyExample options: + debugRequest: true useDapper: false targetFramework: netstandard2.0 generateCsproj: true namespaceName: MySqlConnectorLegacyExampleGen - debugRequest: true + overrides: + - column: "GetMysqlFunctions:max_int" + csharp_type: + type: "int" + - column: "GetMysqlFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetMysqlFunctions:max_timestamp" + csharp_type: + type: "DateTime" + - column: "GetMysqlFunctions:max_bigint" + csharp_type: + type: "long" - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" engine: "mysql" @@ -98,11 +177,24 @@ sql: - plugin: csharp out: examples/MySqlConnectorDapperLegacyExample options: + debugRequest: true useDapper: true targetFramework: netstandard2.0 generateCsproj: true namespaceName: MySqlConnectorDapperLegacyExampleGen - debugRequest: true + overrides: + - column: "GetMysqlFunctions:max_int" + csharp_type: + type: "int" + - column: "GetMysqlFunctions:max_varchar" + csharp_type: + type: "string" + - column: "GetMysqlFunctions:max_timestamp" + csharp_type: + type: "DateTime" + - column: "GetMysqlFunctions:max_bigint" + csharp_type: + type: "long" # Sqlite - schema: "examples/config/sqlite/schema.sql" @@ -112,11 +204,18 @@ sql: - plugin: csharp out: examples/SqliteExample options: + debugRequest: true useDapper: false targetFramework: net8.0 generateCsproj: true namespaceName: SqliteExampleGen - debugRequest: true + overrides: + - column: "GetSqliteFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetSqliteFunctions:max_varchar" + csharp_type: + type: "string" - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" engine: "sqlite" @@ -124,11 +223,18 @@ sql: - plugin: csharp out: examples/SqliteDapperExample options: + debugRequest: true useDapper: true targetFramework: net8.0 generateCsproj: true namespaceName: SqliteDapperExampleGen - debugRequest: true + overrides: + - column: "GetSqliteFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetSqliteFunctions:max_varchar" + csharp_type: + type: "string" - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" engine: "sqlite" @@ -136,11 +242,18 @@ sql: - plugin: csharp out: examples/SqliteLegacyExample options: + debugRequest: true useDapper: false targetFramework: netstandard2.0 generateCsproj: true namespaceName: SqliteLegacyExampleGen - debugRequest: true + overrides: + - column: "GetSqliteFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetSqliteFunctions:max_varchar" + csharp_type: + type: "string" - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" engine: "sqlite" @@ -148,8 +261,15 @@ sql: - plugin: csharp out: examples/SqliteDapperLegacyExample options: + debugRequest: true useDapper: true targetFramework: netstandard2.0 generateCsproj: true namespaceName: SqliteDapperLegacyExampleGen - debugRequest: true + overrides: + - column: "GetSqliteFunctions:max_integer" + csharp_type: + type: "int" + - column: "GetSqliteFunctions:max_varchar" + csharp_type: + type: "string" From 131b3f8ab72af74c807e0fcba6d3b2098f873905 Mon Sep 17 00:00:00 2001 From: Ilan Uzan Date: Sun, 29 Jun 2025 15:29:24 +0200 Subject: [PATCH 03/11] fix: update request files and fix Makefile flow --- Makefile | 4 +- end2end/EndToEndScaffold/Config.cs | 3 ++ .../EndToEndScaffold/Templates/SqliteTests.cs | 10 ++++ .../MySqlConnectorDapperExample/request.json | 48 ++++++++++++++++++- .../request.json | 48 ++++++++++++++++++- examples/MySqlConnectorExample/request.json | 48 ++++++++++++++++++- .../MySqlConnectorLegacyExample/request.json | 48 ++++++++++++++++++- examples/NpgsqlDapperExample/request.json | 39 ++++++++++++++- .../NpgsqlDapperLegacyExample/request.json | 39 ++++++++++++++- examples/NpgsqlExample/request.json | 39 ++++++++++++++- examples/NpgsqlLegacyExample/request.json | 39 ++++++++++++++- examples/SqliteDapperExample/request.json | 28 ++++++++++- .../SqliteDapperLegacyExample/request.json | 28 ++++++++++- examples/SqliteExample/request.json | 28 ++++++++++- examples/SqliteLegacyExample/request.json | 28 ++++++++++- 15 files changed, 450 insertions(+), 27 deletions(-) diff --git a/Makefile b/Makefile index 8aa56a69..3e1d7100 100644 --- a/Makefile +++ b/Makefile @@ -31,8 +31,6 @@ dotnet-publish-process: dotnet-build-process sqlc-generate-process: dotnet-publish-process sqlc -f sqlc.local.yaml generate -test-process-plugin: unit-tests sqlc-generate-process dotnet-build run-end2end-tests - # WASM type plugin dotnet-publish-wasm: protobuf-generate dotnet publish WasmRunner -c release --output dist/ @@ -44,4 +42,4 @@ update-wasm-plugin: sqlc-generate-wasm: dotnet-publish-wasm update-wasm-plugin SQLCCACHE=./; sqlc -f sqlc.ci.yaml generate -test-wasm-plugin: unit-tests sqlc-generate-wasm update-wasm-plugin dotnet-build run-end2end-tests \ No newline at end of file +test-wasm-plugin: sqlc-generate-process unit-tests sqlc-generate-wasm update-wasm-plugin dotnet-build run-end2end-tests \ No newline at end of file diff --git a/end2end/EndToEndScaffold/Config.cs b/end2end/EndToEndScaffold/Config.cs index b47cf491..de5116ab 100644 --- a/end2end/EndToEndScaffold/Config.cs +++ b/end2end/EndToEndScaffold/Config.cs @@ -28,6 +28,7 @@ public enum KnownTestType // Sqlite SqliteDataTypes, + SqliteDataTypesOverride, SqliteCopyFrom, // Postgres @@ -36,6 +37,7 @@ public enum KnownTestType PostgresFloatingPointDataTypes, PostgresDateTimeDataTypes, PostgresArrayDataTypes, + PostgresDataTypesOverride, PostgresStringCopyFrom, PostgresIntegerCopyFrom, @@ -54,6 +56,7 @@ public enum KnownTestType MySqlDateTimeDataTypes, MySqlBinaryDataTypes, MySqlEnumDataType, + MySqlDataTypesOverride, MySqlScopedSchemaEnum, MySqlStringCopyFrom, diff --git a/end2end/EndToEndScaffold/Templates/SqliteTests.cs b/end2end/EndToEndScaffold/Templates/SqliteTests.cs index c7eb367d..d6a7e10f 100644 --- a/end2end/EndToEndScaffold/Templates/SqliteTests.cs +++ b/end2end/EndToEndScaffold/Templates/SqliteTests.cs @@ -89,5 +89,15 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesCntRow expected, } """ }, + [KnownTestType.SqliteDataTypesOverride] = new TestImpl + { + Impl = $$""" + [Test] + public async Task TestSqliteDataTypesOverride() + { + var actual = await QuerySql.GetSqliteTypes(); + } + """ + } }; } \ No newline at end of file diff --git a/examples/MySqlConnectorDapperExample/request.json b/examples/MySqlConnectorDapperExample/request.json index 8a3c7079..b5444d0a 100644 --- a/examples/MySqlConnectorDapperExample/request.json +++ b/examples/MySqlConnectorDapperExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/MySqlConnectorDapperExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JEYXBwZXJFeGFtcGxlR2VuIiwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JEYXBwZXJFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF90aW1lc3RhbXAiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfYmlnaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImxvbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOnRydWV9", "process": { "cmd": "./dist/LocalRunner" } @@ -2702,7 +2702,7 @@ }, { "text": "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, \n c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, \n c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum,\n c_year, c_date, c_datetime, c_timestamp, \n c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob\nFROM mysql_types\nGROUP BY c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, \n c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, \n c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum,\n c_year, c_date, c_datetime, c_timestamp, \n c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob\nLIMIT 1", - "name": "GetMysqlTypesAgg", + "name": "GetMysqlTypesCnt", "cmd": ":one", "columns": [ { @@ -3102,6 +3102,50 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint\nFROM mysql_types", + "name": "GetMysqlFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_int", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_varchar", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_timestamp", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_bigint", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + } + ], + "filename": "query.sql" + }, { "text": "TRUNCATE TABLE mysql_types", "name": "TruncateMysqlTypes", diff --git a/examples/MySqlConnectorDapperLegacyExample/request.json b/examples/MySqlConnectorDapperLegacyExample/request.json index 2dd58e28..62907b54 100644 --- a/examples/MySqlConnectorDapperLegacyExample/request.json +++ b/examples/MySqlConnectorDapperLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/MySqlConnectorDapperLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JEYXBwZXJMZWdhY3lFeGFtcGxlR2VuIiwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJ1c2VEYXBwZXIiOnRydWV9", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JEYXBwZXJMZWdhY3lFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF90aW1lc3RhbXAiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfYmlnaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImxvbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXRzdGFuZGFyZDIuMCIsInVzZURhcHBlciI6dHJ1ZX0=", "process": { "cmd": "./dist/LocalRunner" } @@ -2702,7 +2702,7 @@ }, { "text": "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, \n c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, \n c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum,\n c_year, c_date, c_datetime, c_timestamp, \n c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob\nFROM mysql_types\nGROUP BY c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, \n c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, \n c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum,\n c_year, c_date, c_datetime, c_timestamp, \n c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob\nLIMIT 1", - "name": "GetMysqlTypesAgg", + "name": "GetMysqlTypesCnt", "cmd": ":one", "columns": [ { @@ -3102,6 +3102,50 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint\nFROM mysql_types", + "name": "GetMysqlFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_int", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_varchar", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_timestamp", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_bigint", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + } + ], + "filename": "query.sql" + }, { "text": "TRUNCATE TABLE mysql_types", "name": "TruncateMysqlTypes", diff --git a/examples/MySqlConnectorExample/request.json b/examples/MySqlConnectorExample/request.json index 1d439ddc..a2d4905e 100644 --- a/examples/MySqlConnectorExample/request.json +++ b/examples/MySqlConnectorExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/MySqlConnectorExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JFeGFtcGxlR2VuIiwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF90aW1lc3RhbXAiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfYmlnaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImxvbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", "process": { "cmd": "./dist/LocalRunner" } @@ -2702,7 +2702,7 @@ }, { "text": "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, \n c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, \n c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum,\n c_year, c_date, c_datetime, c_timestamp, \n c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob\nFROM mysql_types\nGROUP BY c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, \n c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, \n c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum,\n c_year, c_date, c_datetime, c_timestamp, \n c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob\nLIMIT 1", - "name": "GetMysqlTypesAgg", + "name": "GetMysqlTypesCnt", "cmd": ":one", "columns": [ { @@ -3102,6 +3102,50 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint\nFROM mysql_types", + "name": "GetMysqlFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_int", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_varchar", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_timestamp", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_bigint", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + } + ], + "filename": "query.sql" + }, { "text": "TRUNCATE TABLE mysql_types", "name": "TruncateMysqlTypes", diff --git a/examples/MySqlConnectorLegacyExample/request.json b/examples/MySqlConnectorLegacyExample/request.json index 7228093e..1ab327d2 100644 --- a/examples/MySqlConnectorLegacyExample/request.json +++ b/examples/MySqlConnectorLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/MySqlConnectorLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JMZWdhY3lFeGFtcGxlR2VuIiwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JMZWdhY3lFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF90aW1lc3RhbXAiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfYmlnaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImxvbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXRzdGFuZGFyZDIuMCIsInVzZURhcHBlciI6ZmFsc2V9", "process": { "cmd": "./dist/LocalRunner" } @@ -2702,7 +2702,7 @@ }, { "text": "SELECT COUNT(1) AS cnt, c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, \n c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, \n c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum,\n c_year, c_date, c_datetime, c_timestamp, \n c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob\nFROM mysql_types\nGROUP BY c_bool, c_boolean, c_bit, c_tinyint, c_smallint, c_mediumint, c_int, c_integer, c_bigint, \n c_float, c_numeric, c_decimal, c_dec, c_fixed, c_double, c_double_precision, \n c_char, c_nchar, c_national_char, c_varchar, c_tinytext, c_mediumtext, c_text, c_longtext, c_enum,\n c_year, c_date, c_datetime, c_timestamp, \n c_binary, c_varbinary, c_tinyblob, c_blob, c_mediumblob, c_longblob\nLIMIT 1", - "name": "GetMysqlTypesAgg", + "name": "GetMysqlTypesCnt", "cmd": ":one", "columns": [ { @@ -3102,6 +3102,50 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint\nFROM mysql_types", + "name": "GetMysqlFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_int", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_varchar", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_timestamp", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_bigint", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + } + ], + "filename": "query.sql" + }, { "text": "TRUNCATE TABLE mysql_types", "name": "TruncateMysqlTypes", diff --git a/examples/NpgsqlDapperExample/request.json b/examples/NpgsqlDapperExample/request.json index a11a5179..6cfa9a81 100644 --- a/examples/NpgsqlDapperExample/request.json +++ b/examples/NpgsqlDapperExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/NpgsqlDapperExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRGFwcGVyRXhhbXBsZUdlbiIsInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6dHJ1ZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50In19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6dHJ1ZX0=", "process": { "cmd": "./dist/LocalRunner" } @@ -33894,7 +33894,7 @@ }, { "text": "SELECT COUNT(1) AS cnt , \n c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nFROM postgres_types\nGROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nLIMIT 1", - "name": "GetPostgresTypesAgg", + "name": "GetPostgresTypesCnt", "cmd": ":one", "columns": [ { @@ -34121,6 +34121,41 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", + "name": "GetPostgresFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_integer", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + }, + { + "name": "max_varchar", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + }, + { + "name": "max_timestamp", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + } + ], + "filename": "query.sql" + }, { "text": "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", "name": "InsertPostgresGeoTypes", diff --git a/examples/NpgsqlDapperLegacyExample/request.json b/examples/NpgsqlDapperLegacyExample/request.json index 39d5e60d..95104744 100644 --- a/examples/NpgsqlDapperLegacyExample/request.json +++ b/examples/NpgsqlDapperLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/NpgsqlDapperLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50In19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", "process": { "cmd": "./dist/LocalRunner" } @@ -33894,7 +33894,7 @@ }, { "text": "SELECT COUNT(1) AS cnt , \n c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nFROM postgres_types\nGROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nLIMIT 1", - "name": "GetPostgresTypesAgg", + "name": "GetPostgresTypesCnt", "cmd": ":one", "columns": [ { @@ -34121,6 +34121,41 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", + "name": "GetPostgresFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_integer", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + }, + { + "name": "max_varchar", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + }, + { + "name": "max_timestamp", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + } + ], + "filename": "query.sql" + }, { "text": "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", "name": "InsertPostgresGeoTypes", diff --git a/examples/NpgsqlExample/request.json b/examples/NpgsqlExample/request.json index 9e0ad46f..dbd7afdf 100644 --- a/examples/NpgsqlExample/request.json +++ b/examples/NpgsqlExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/NpgsqlExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRXhhbXBsZUdlbiIsInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6ZmFsc2V9", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50In19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6ZmFsc2V9", "process": { "cmd": "./dist/LocalRunner" } @@ -33894,7 +33894,7 @@ }, { "text": "SELECT COUNT(1) AS cnt , \n c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nFROM postgres_types\nGROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nLIMIT 1", - "name": "GetPostgresTypesAgg", + "name": "GetPostgresTypesCnt", "cmd": ":one", "columns": [ { @@ -34121,6 +34121,41 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", + "name": "GetPostgresFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_integer", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + }, + { + "name": "max_varchar", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + }, + { + "name": "max_timestamp", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + } + ], + "filename": "query.sql" + }, { "text": "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", "name": "InsertPostgresGeoTypes", diff --git a/examples/NpgsqlLegacyExample/request.json b/examples/NpgsqlLegacyExample/request.json index a3f044d4..2076a29c 100644 --- a/examples/NpgsqlLegacyExample/request.json +++ b/examples/NpgsqlLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/NpgsqlLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsTGVnYWN5RXhhbXBsZUdlbiIsInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50In19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", "process": { "cmd": "./dist/LocalRunner" } @@ -33894,7 +33894,7 @@ }, { "text": "SELECT COUNT(1) AS cnt , \n c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nFROM postgres_types\nGROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nLIMIT 1", - "name": "GetPostgresTypesAgg", + "name": "GetPostgresTypesCnt", "cmd": ":one", "columns": [ { @@ -34121,6 +34121,41 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", + "name": "GetPostgresFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_integer", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + }, + { + "name": "max_varchar", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + }, + { + "name": "max_timestamp", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "anyarray" + } + } + ], + "filename": "query.sql" + }, { "text": "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", "name": "InsertPostgresGeoTypes", diff --git a/examples/SqliteDapperExample/request.json b/examples/SqliteDapperExample/request.json index c8c33988..4044d5fd 100644 --- a/examples/SqliteDapperExample/request.json +++ b/examples/SqliteDapperExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteDapperExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyRXhhbXBsZUdlbiIsInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6dHJ1ZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOnRydWV9", "process": { "cmd": "./dist/LocalRunner" } @@ -1048,7 +1048,7 @@ }, { "text": "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", - "name": "GetSqliteTypesAgg", + "name": "GetSqliteTypesCnt", "cmd": ":one", "columns": [ { @@ -1107,6 +1107,30 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text\nFROM types_sqlite", + "name": "GetSqliteFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_integer", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_text", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + } + ], + "filename": "query.sql" + }, { "text": "DELETE FROM types_sqlite", "name": "DeleteAllSqliteTypes", diff --git a/examples/SqliteDapperLegacyExample/request.json b/examples/SqliteDapperLegacyExample/request.json index 03eeeb7a..5b7163a2 100644 --- a/examples/SqliteDapperLegacyExample/request.json +++ b/examples/SqliteDapperLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteDapperLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXRzdGFuZGFyZDIuMCIsInVzZURhcHBlciI6dHJ1ZX0=", "process": { "cmd": "./dist/LocalRunner" } @@ -1048,7 +1048,7 @@ }, { "text": "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", - "name": "GetSqliteTypesAgg", + "name": "GetSqliteTypesCnt", "cmd": ":one", "columns": [ { @@ -1107,6 +1107,30 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text\nFROM types_sqlite", + "name": "GetSqliteFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_integer", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_text", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + } + ], + "filename": "query.sql" + }, { "text": "DELETE FROM types_sqlite", "name": "DeleteAllSqliteTypes", diff --git a/examples/SqliteExample/request.json b/examples/SqliteExample/request.json index cc98b659..38a3ccdb 100644 --- a/examples/SqliteExample/request.json +++ b/examples/SqliteExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRXhhbXBsZUdlbiIsInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6ZmFsc2V9", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", "process": { "cmd": "./dist/LocalRunner" } @@ -1048,7 +1048,7 @@ }, { "text": "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", - "name": "GetSqliteTypesAgg", + "name": "GetSqliteTypesCnt", "cmd": ":one", "columns": [ { @@ -1107,6 +1107,30 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text\nFROM types_sqlite", + "name": "GetSqliteFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_integer", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_text", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + } + ], + "filename": "query.sql" + }, { "text": "DELETE FROM types_sqlite", "name": "DeleteAllSqliteTypes", diff --git a/examples/SqliteLegacyExample/request.json b/examples/SqliteLegacyExample/request.json index 910a5f3b..7d61b805 100644 --- a/examples/SqliteLegacyExample/request.json +++ b/examples/SqliteLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlTGVnYWN5RXhhbXBsZUdlbiIsInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXRzdGFuZGFyZDIuMCIsInVzZURhcHBlciI6ZmFsc2V9", "process": { "cmd": "./dist/LocalRunner" } @@ -1048,7 +1048,7 @@ }, { "text": "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", - "name": "GetSqliteTypesAgg", + "name": "GetSqliteTypesCnt", "cmd": ":one", "columns": [ { @@ -1107,6 +1107,30 @@ ], "filename": "query.sql" }, + { + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text\nFROM types_sqlite", + "name": "GetSqliteFunctions", + "cmd": ":one", + "columns": [ + { + "name": "max_integer", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, + { + "name": "max_text", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + } + ], + "filename": "query.sql" + }, { "text": "DELETE FROM types_sqlite", "name": "DeleteAllSqliteTypes", From c20053b71808e4403c53a9f0b8ef45acc9a1240c Mon Sep 17 00:00:00 2001 From: Ilan Uzan Date: Sun, 29 Jun 2025 17:34:01 +0200 Subject: [PATCH 04/11] feat: generate missing tests --- CodeGenerator/Generators/DataClassesGen.cs | 4 +- CodeGenerator/Generators/ModelsGen.cs | 2 +- CodeGenerator/Generators/QueriesGen.cs | 4 +- Drivers/DbDriver.cs | 17 +++++++- Drivers/Generators/CommonGen.cs | 38 +++++++++--------- Makefile | 1 + end2end/EndToEndScaffold/Config.cs | 10 ++++- .../EndToEndScaffold/Templates/MySqlTests.cs | 40 +++++++++++++++++++ .../Templates/PostgresTests.cs | 36 +++++++++++++++++ .../EndToEndScaffold/Templates/SqliteTests.cs | 32 +++++++++++++-- .../MySqlConnectorDapperTester.generated.cs | 25 ++++++++++++ .../MySqlConnectorTester.generated.cs | 25 ++++++++++++ .../NpgsqlDapperTester.generated.cs | 23 +++++++++++ .../EndToEndTests/NpgsqlTester.generated.cs | 23 +++++++++++ .../SqliteDapperTester.generated.cs | 25 +++++++++++- .../EndToEndTests/SqliteTester.generated.cs | 25 +++++++++++- .../MySqlConnectorDapperTester.generated.cs | 25 ++++++++++++ .../MySqlConnectorTester.generated.cs | 25 ++++++++++++ .../NpgsqlDapperTester.generated.cs | 23 +++++++++++ .../NpgsqlTester.generated.cs | 23 +++++++++++ .../SqliteDapperTester.generated.cs | 25 +++++++++++- .../SqliteTester.generated.cs | 25 +++++++++++- .../MySqlConnectorDapperExample/QuerySql.cs | 8 ++-- .../QuerySql.cs | 8 ++-- examples/MySqlConnectorExample/QuerySql.cs | 10 ++--- .../MySqlConnectorLegacyExample/QuerySql.cs | 16 ++++---- examples/NpgsqlDapperExample/QuerySql.cs | 6 +-- .../NpgsqlDapperLegacyExample/QuerySql.cs | 6 +-- examples/NpgsqlExample/QuerySql.cs | 8 ++-- examples/NpgsqlLegacyExample/QuerySql.cs | 12 +++--- examples/SqliteDapperExample/QuerySql.cs | 5 ++- examples/SqliteDapperExample/request.json | 12 +++++- .../SqliteDapperLegacyExample/QuerySql.cs | 5 ++- .../SqliteDapperLegacyExample/request.json | 12 +++++- examples/SqliteExample/QuerySql.cs | 7 ++-- examples/SqliteExample/request.json | 12 +++++- examples/SqliteLegacyExample/QuerySql.cs | 8 ++-- examples/SqliteLegacyExample/request.json | 12 +++++- examples/config/sqlite/query.sql | 2 +- scripts/sync_sqlc_options.sh | 21 ++++++++++ sqlc.ci.yaml | 14 ++++++- sqlc.local.yaml | 38 +++++++++++------- 42 files changed, 592 insertions(+), 106 deletions(-) create mode 100755 scripts/sync_sqlc_options.sh diff --git a/CodeGenerator/Generators/DataClassesGen.cs b/CodeGenerator/Generators/DataClassesGen.cs index 53078d61..f2cf451d 100644 --- a/CodeGenerator/Generators/DataClassesGen.cs +++ b/CodeGenerator/Generators/DataClassesGen.cs @@ -10,7 +10,7 @@ namespace SqlcGenCsharp.Generators; internal class DataClassesGen(DbDriver dbDriver) { - public MemberDeclarationSyntax Generate(string name, ClassMember? classMember, IList columns, Options options, Query? query = null) + public MemberDeclarationSyntax Generate(string name, ClassMember? classMember, IList columns, Options options, Query? query) { var className = classMember is null ? name : classMember.Value.Name(name); if (options.DotnetFramework.IsDotnetCore() && !options.UseDapper) @@ -58,7 +58,7 @@ bool RequiredModifierNeeded(Column column) return false; if (column.EmbedTable != null) return true; - return column.NotNull; + return dbDriver.IsColumnNotNull(column, query); } } diff --git a/CodeGenerator/Generators/ModelsGen.cs b/CodeGenerator/Generators/ModelsGen.cs index 1cb8cf82..9e397bdd 100644 --- a/CodeGenerator/Generators/ModelsGen.cs +++ b/CodeGenerator/Generators/ModelsGen.cs @@ -46,7 +46,7 @@ private MemberDeclarationSyntax[] GenerateDataClasses(Dictionary GetMembersForSingleQuery(Query quer private MemberDeclarationSyntax? GetQueryColumnsDataclass(Query query) { if (query.Columns.Count <= 0) return null; - return DataClassesGen.Generate(query.Name, ClassMember.Row, query.Columns, dbDriver.Options); + return DataClassesGen.Generate(query.Name, ClassMember.Row, query.Columns, dbDriver.Options, query); } private MemberDeclarationSyntax? GetQueryParamsDataclass(Query query) { if (query.Params.Count <= 0) return null; var columns = query.Params.Select(p => dbDriver.GetColumnFromParam(p, query)).ToList(); - return DataClassesGen.Generate(query.Name, ClassMember.Args, columns, dbDriver.Options); + return DataClassesGen.Generate(query.Name, ClassMember.Args, columns, dbDriver.Options, query); } private MemberDeclarationSyntax? GetQueryTextConstant(Query query) diff --git a/Drivers/DbDriver.cs b/Drivers/DbDriver.cs index 62f0a0dc..be86e317 100644 --- a/Drivers/DbDriver.cs +++ b/Drivers/DbDriver.cs @@ -133,7 +133,7 @@ public string AddNullableSuffixIfNeeded(string csharpType, bool notNull) public string GetCsharpType(Column column, Query? query) { var csharpType = GetCsharpTypeWithoutNullableSuffix(column, query); - return AddNullableSuffixIfNeeded(csharpType, column.NotNull); + return AddNullableSuffixIfNeeded(csharpType, IsColumnNotNull(column, query)); } private string GetCsharpTypeWithoutNullableSuffix(Column column, Query? query) @@ -285,8 +285,21 @@ protected bool BatchQueryExists() return Queries.Any(q => q.Cmd is ":copyfrom"); } - private OverrideOption? FindOverrideForQueryColumn(Query query, Column column) + public OverrideOption? FindOverrideForQueryColumn(Query query, Column column) { return Options.Overrides.FirstOrDefault(o => o.Column.Equals($"{query.Name}:{column.Name}")); } + + /// + /// If the column data type is overridden, we need to check for nulls in generated code + /// + /// + /// + /// Adjusted not null value + public bool IsColumnNotNull(Column column, Query? query) + { + if (query is null) + return column.NotNull; + return column.NotNull && FindOverrideForQueryColumn(query, column) is null; + } } \ No newline at end of file diff --git a/Drivers/Generators/CommonGen.cs b/Drivers/Generators/CommonGen.cs index 613b4ac2..6297ecd9 100644 --- a/Drivers/Generators/CommonGen.cs +++ b/Drivers/Generators/CommonGen.cs @@ -135,25 +135,6 @@ string GetAsSimpleAssignment(Column column, int ordinal, Query query) return $"{column.Name.ToPascalCase()} = {readExpression}"; } - string GetReadExpression(Column column, int ordinal, Query query) - { - return column.NotNull - ? dbDriver.GetColumnReader(column, ordinal, query) - : $"{CheckNullExpression(ordinal)} ? {GetNullExpression(column, query)} : {dbDriver.GetColumnReader(column, ordinal, query)}"; - } - - string GetNullExpression(Column column, Query? query) - { - var csharpType = dbDriver.GetCsharpType(column, query); - if (dbDriver.Options.DotnetFramework.IsDotnetCore()) return "null"; - return dbDriver.IsTypeNullable(csharpType) ? $"({csharpType}) null" : "null"; - } - - string CheckNullExpression(int ordinal) - { - return $"{Variable.Reader.AsVarName()}.IsDBNull({ordinal})"; - } - string InstantiateDataclassInternal(string name, IEnumerable fieldsInit) { return $$""" @@ -164,4 +145,23 @@ string InstantiateDataclassInternal(string name, IEnumerable fieldsInit) """; } } + + private string GetNullExpression(Column column, Query? query) + { + var csharpType = dbDriver.GetCsharpType(column, query); + if (dbDriver.Options.DotnetFramework.IsDotnetCore()) return "null"; + return dbDriver.IsTypeNullable(csharpType) ? $"({csharpType}) null" : "null"; + } + + private static string CheckNullExpression(int ordinal) + { + return $"{Variable.Reader.AsVarName()}.IsDBNull({ordinal})"; + } + + private string GetReadExpression(Column column, int ordinal, Query query) + { + if (dbDriver.IsColumnNotNull(column, query)) + return dbDriver.GetColumnReader(column, ordinal, query); + return $"{CheckNullExpression(ordinal)} ? {GetNullExpression(column, query)} : {dbDriver.GetColumnReader(column, ordinal, query)}"; + } } \ No newline at end of file diff --git a/Makefile b/Makefile index 3e1d7100..d74ace0a 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,7 @@ dotnet-publish-process: dotnet-build-process dotnet publish LocalRunner -c release --output dist/ sqlc-generate-process: dotnet-publish-process + ./scripts/sync_sqlc_options.sh sqlc -f sqlc.local.yaml generate # WASM type plugin diff --git a/end2end/EndToEndScaffold/Config.cs b/end2end/EndToEndScaffold/Config.cs index de5116ab..6f6fc214 100644 --- a/end2end/EndToEndScaffold/Config.cs +++ b/end2end/EndToEndScaffold/Config.cs @@ -97,6 +97,7 @@ internal static class Config KnownTestType.MySqlBinaryDataTypes, KnownTestType.MySqlEnumDataType, KnownTestType.MySqlScopedSchemaEnum, + KnownTestType.MySqlDataTypesOverride, KnownTestType.MySqlStringCopyFrom, KnownTestType.MySqlIntegerCopyFrom, @@ -132,6 +133,7 @@ internal static class Config KnownTestType.MySqlBinaryDataTypes, KnownTestType.MySqlEnumDataType, KnownTestType.MySqlScopedSchemaEnum, + KnownTestType.MySqlDataTypesOverride, KnownTestType.MySqlStringCopyFrom, KnownTestType.MySqlIntegerCopyFrom, @@ -166,6 +168,7 @@ internal static class Config KnownTestType.PostgresDateTimeDataTypes, KnownTestType.PostgresArrayDataTypes, KnownTestType.PostgresGeoDataTypes, + KnownTestType.PostgresDataTypesOverride, KnownTestType.PostgresStringCopyFrom, KnownTestType.PostgresIntegerCopyFrom, @@ -199,6 +202,7 @@ internal static class Config KnownTestType.PostgresDateTimeDataTypes, KnownTestType.PostgresArrayDataTypes, KnownTestType.PostgresGeoDataTypes, + KnownTestType.PostgresDataTypesOverride, KnownTestType.PostgresStringCopyFrom, KnownTestType.PostgresIntegerCopyFrom, @@ -226,7 +230,8 @@ internal static class Config KnownTestType.NargNull, KnownTestType.NargNotNull, KnownTestType.SqliteDataTypes, - KnownTestType.SqliteCopyFrom + KnownTestType.SqliteCopyFrom, + KnownTestType.SqliteDataTypesOverride ] } }, @@ -248,7 +253,8 @@ internal static class Config KnownTestType.NargNull, KnownTestType.NargNotNull, KnownTestType.SqliteDataTypes, - KnownTestType.SqliteCopyFrom + KnownTestType.SqliteCopyFrom, + KnownTestType.SqliteDataTypesOverride ] } }, diff --git a/end2end/EndToEndScaffold/Templates/MySqlTests.cs b/end2end/EndToEndScaffold/Templates/MySqlTests.cs index 64dad9d3..06502ede 100644 --- a/end2end/EndToEndScaffold/Templates/MySqlTests.cs +++ b/end2end/EndToEndScaffold/Templates/MySqlTests.cs @@ -580,6 +580,46 @@ private static bool SingularEquals(QuerySql.GetFirstExtendedBioByTypeRow x, Quer return x.AuthorName.Equals(y.AuthorName) && x.Name.Equals(y.Name) && x.BioType.Equals(y.BioType); } """ + }, + [KnownTestType.MySqlDataTypesOverride] = new TestImpl + { + Impl = $$""" + [Test] + [TestCase(-54355, 9787876578, "Scream of the Butterfly", "2025-06-29 12:00:00")] + [TestCase(null, null, null, null)] + public async Task TestMySqlDataTypesOverride( + int? cInt, + long? cBigint, + string cVarchar, + DateTime? cTimestamp) + { + await QuerySql.InsertMysqlTypes(new QuerySql.InsertMysqlTypesArgs + { + CInt = cInt, + CBigint = cBigint, + CVarchar = cVarchar, + CTimestamp = cTimestamp + }); + var expected = new QuerySql.GetMysqlFunctionsRow + { + MaxInt = cInt, + MaxBigint = cBigint, + MaxVarchar = cVarchar, + MaxTimestamp = cTimestamp + }; + + var actual = await QuerySql.GetMysqlFunctions(); + AssertSingularEquals(expected, actual{{Consts.UnknownRecordValuePlaceholder}}); + } + + private static void AssertSingularEquals(QuerySql.GetMysqlFunctionsRow expected, QuerySql.GetMysqlFunctionsRow actual) + { + Assert.That(actual.MaxInt, Is.EqualTo(expected.MaxInt)); + Assert.That(actual.MaxBigint, Is.EqualTo(expected.MaxBigint)); + Assert.That(actual.MaxVarchar, Is.EqualTo(expected.MaxVarchar)); + Assert.That(actual.MaxTimestamp, Is.EqualTo(expected.MaxTimestamp)); + } + """ } }; } \ No newline at end of file diff --git a/end2end/EndToEndScaffold/Templates/PostgresTests.cs b/end2end/EndToEndScaffold/Templates/PostgresTests.cs index ced71e17..75e89007 100644 --- a/end2end/EndToEndScaffold/Templates/PostgresTests.cs +++ b/end2end/EndToEndScaffold/Templates/PostgresTests.cs @@ -484,6 +484,42 @@ public async Task TestPostgresGeoTypes(NpgsqlPoint? cPoint, NpgsqlLine? cLine, N } """ }, + [KnownTestType.PostgresDataTypesOverride] = new TestImpl + { + Impl = $$""" + [Test] + [TestCase(-54355, "White Light from the Mouth of Infinity", "2022-10-2 15:44:01+09:00")] + [TestCase(null, null, null)] + public async Task TestPostgresDataTypesOverride( + int? cInteger, + string cVarchar, + DateTime? cTimestamp) + { + await QuerySql.InsertPostgresTypes(new QuerySql.InsertPostgresTypesArgs + { + CInteger = cInteger, + CVarchar = cVarchar, + CTimestamp = cTimestamp + }); + + var expected = new QuerySql.GetPostgresFunctionsRow + { + MaxInteger = cInteger, + MaxVarchar = cVarchar, + MaxTimestamp = cTimestamp + }; + var actual = await QuerySql.GetPostgresFunctions(); + AssertSingularEquals(expected, actual{{Consts.UnknownRecordValuePlaceholder}}); + } + + private static void AssertSingularEquals(QuerySql.GetPostgresFunctionsRow expected, QuerySql.GetPostgresFunctionsRow actual) + { + Assert.That(actual.MaxInteger, Is.EqualTo(expected.MaxInteger)); + Assert.That(actual.MaxVarchar, Is.EqualTo(expected.MaxVarchar)); + Assert.That(actual.MaxTimestamp, Is.EqualTo(expected.MaxTimestamp)); + } + """ + } }; } \ No newline at end of file diff --git a/end2end/EndToEndScaffold/Templates/SqliteTests.cs b/end2end/EndToEndScaffold/Templates/SqliteTests.cs index d6a7e10f..726eea4d 100644 --- a/end2end/EndToEndScaffold/Templates/SqliteTests.cs +++ b/end2end/EndToEndScaffold/Templates/SqliteTests.cs @@ -14,7 +14,7 @@ public static class SqliteTests [TestCase(null, null, null, new byte[] { })] [TestCase(null, null, null, null)] public async Task TestSqliteTypes( - int cInteger, + int? cInteger, decimal? cReal, string cText, byte[] cBlob) @@ -93,9 +93,35 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesCntRow expected, { Impl = $$""" [Test] - public async Task TestSqliteDataTypesOverride() + [TestCase(-54355, 9787.66, "Have One On Me")] + [TestCase(null, null, null)] + public async Task TestSqliteDataTypesOverride( + int? cInteger, + decimal? cReal, + string cText) { - var actual = await QuerySql.GetSqliteTypes(); + await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs + { + CInteger = cInteger, + CReal = cReal, + CText = cText + }); + + var expected = new QuerySql.GetSqliteFunctionsRow + { + MaxInteger = cInteger, + MaxReal = cReal, + MaxText = cText + }; + var actual = await QuerySql.GetSqliteFunctions(); + AssertSingularEquals(expected, actual{{Consts.UnknownRecordValuePlaceholder}}); + } + + private static void AssertSingularEquals(QuerySql.GetSqliteFunctionsRow expected, QuerySql.GetSqliteFunctionsRow actual) + { + Assert.That(actual.MaxInteger, Is.EqualTo(expected.MaxInteger)); + Assert.That(actual.MaxReal, Is.EqualTo(expected.MaxReal)); + Assert.That(actual.MaxText, Is.EqualTo(expected.MaxText)); } """ } diff --git a/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs b/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs index 6173afc5..c66ffdab 100644 --- a/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs +++ b/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs @@ -446,6 +446,31 @@ public async Task TestMySqlStringTypes(MysqlTypesCEnum? cEnum) Assert.That(actual.CEnum, Is.EqualTo(expected.CEnum)); } + [Test] + [TestCase(-54355, 9787876578, "Scream of the Butterfly", "2025-06-29 12:00:00")] + [TestCase(null, null, null, null)] + public async Task TestMySqlDataTypesOverride(int? cInt, long? cBigint, string cVarchar, DateTime? cTimestamp) + { + await QuerySql.InsertMysqlTypes(new QuerySql.InsertMysqlTypesArgs { CInt = cInt, CBigint = cBigint, CVarchar = cVarchar, CTimestamp = cTimestamp }); + var expected = new QuerySql.GetMysqlFunctionsRow + { + MaxInt = cInt, + MaxBigint = cBigint, + MaxVarchar = cVarchar, + MaxTimestamp = cTimestamp + }; + var actual = await QuerySql.GetMysqlFunctions(); + AssertSingularEquals(expected, actual); + } + + private static void AssertSingularEquals(QuerySql.GetMysqlFunctionsRow expected, QuerySql.GetMysqlFunctionsRow actual) + { + Assert.That(actual.MaxInt, Is.EqualTo(expected.MaxInt)); + Assert.That(actual.MaxBigint, Is.EqualTo(expected.MaxBigint)); + Assert.That(actual.MaxVarchar, Is.EqualTo(expected.MaxVarchar)); + Assert.That(actual.MaxTimestamp, Is.EqualTo(expected.MaxTimestamp)); + } + [Test] public async Task TestMySqlScopedSchemaEnum() { diff --git a/end2end/EndToEndTests/MySqlConnectorTester.generated.cs b/end2end/EndToEndTests/MySqlConnectorTester.generated.cs index ebb459cb..c5149c16 100644 --- a/end2end/EndToEndTests/MySqlConnectorTester.generated.cs +++ b/end2end/EndToEndTests/MySqlConnectorTester.generated.cs @@ -446,6 +446,31 @@ public async Task TestMySqlStringTypes(MysqlTypesCEnum? cEnum) Assert.That(actual.Value.CEnum, Is.EqualTo(expected.CEnum)); } + [Test] + [TestCase(-54355, 9787876578, "Scream of the Butterfly", "2025-06-29 12:00:00")] + [TestCase(null, null, null, null)] + public async Task TestMySqlDataTypesOverride(int? cInt, long? cBigint, string cVarchar, DateTime? cTimestamp) + { + await QuerySql.InsertMysqlTypes(new QuerySql.InsertMysqlTypesArgs { CInt = cInt, CBigint = cBigint, CVarchar = cVarchar, CTimestamp = cTimestamp }); + var expected = new QuerySql.GetMysqlFunctionsRow + { + MaxInt = cInt, + MaxBigint = cBigint, + MaxVarchar = cVarchar, + MaxTimestamp = cTimestamp + }; + var actual = await QuerySql.GetMysqlFunctions(); + AssertSingularEquals(expected, actual.Value); + } + + private static void AssertSingularEquals(QuerySql.GetMysqlFunctionsRow expected, QuerySql.GetMysqlFunctionsRow actual) + { + Assert.That(actual.MaxInt, Is.EqualTo(expected.MaxInt)); + Assert.That(actual.MaxBigint, Is.EqualTo(expected.MaxBigint)); + Assert.That(actual.MaxVarchar, Is.EqualTo(expected.MaxVarchar)); + Assert.That(actual.MaxTimestamp, Is.EqualTo(expected.MaxTimestamp)); + } + [Test] public async Task TestMySqlScopedSchemaEnum() { diff --git a/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs b/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs index eb864c82..6895228a 100644 --- a/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs +++ b/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs @@ -389,6 +389,29 @@ public async Task TestPostgresArrayTypes(byte[] cBytea, string[] cTextArray, int Assert.That(actual.CIntegerArray, Is.EqualTo(expected.CIntegerArray)); } + [Test] + [TestCase(-54355, "White Light from the Mouth of Infinity", "2022-10-2 15:44:01+09:00")] + [TestCase(null, null, null)] + public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime? cTimestamp) + { + await QuerySql.InsertPostgresTypes(new QuerySql.InsertPostgresTypesArgs { CInteger = cInteger, CVarchar = cVarchar, CTimestamp = cTimestamp }); + var expected = new QuerySql.GetPostgresFunctionsRow + { + MaxInteger = cInteger, + MaxVarchar = cVarchar, + MaxTimestamp = cTimestamp + }; + var actual = await QuerySql.GetPostgresFunctions(); + AssertSingularEquals(expected, actual); + } + + private static void AssertSingularEquals(QuerySql.GetPostgresFunctionsRow expected, QuerySql.GetPostgresFunctionsRow actual) + { + Assert.That(actual.MaxInteger, Is.EqualTo(expected.MaxInteger)); + Assert.That(actual.MaxVarchar, Is.EqualTo(expected.MaxVarchar)); + Assert.That(actual.MaxTimestamp, Is.EqualTo(expected.MaxTimestamp)); + } + [Test] [TestCase(100, "z", "Sex Pistols", "Anarchy in the U.K", "Never Mind the Bollocks...")] [TestCase(10, null, null, null, null)] diff --git a/end2end/EndToEndTests/NpgsqlTester.generated.cs b/end2end/EndToEndTests/NpgsqlTester.generated.cs index 6828e21a..48afd5fe 100644 --- a/end2end/EndToEndTests/NpgsqlTester.generated.cs +++ b/end2end/EndToEndTests/NpgsqlTester.generated.cs @@ -389,6 +389,29 @@ public async Task TestPostgresArrayTypes(byte[] cBytea, string[] cTextArray, int Assert.That(actual.Value.CIntegerArray, Is.EqualTo(expected.CIntegerArray)); } + [Test] + [TestCase(-54355, "White Light from the Mouth of Infinity", "2022-10-2 15:44:01+09:00")] + [TestCase(null, null, null)] + public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime? cTimestamp) + { + await QuerySql.InsertPostgresTypes(new QuerySql.InsertPostgresTypesArgs { CInteger = cInteger, CVarchar = cVarchar, CTimestamp = cTimestamp }); + var expected = new QuerySql.GetPostgresFunctionsRow + { + MaxInteger = cInteger, + MaxVarchar = cVarchar, + MaxTimestamp = cTimestamp + }; + var actual = await QuerySql.GetPostgresFunctions(); + AssertSingularEquals(expected, actual.Value); + } + + private static void AssertSingularEquals(QuerySql.GetPostgresFunctionsRow expected, QuerySql.GetPostgresFunctionsRow actual) + { + Assert.That(actual.MaxInteger, Is.EqualTo(expected.MaxInteger)); + Assert.That(actual.MaxVarchar, Is.EqualTo(expected.MaxVarchar)); + Assert.That(actual.MaxTimestamp, Is.EqualTo(expected.MaxTimestamp)); + } + [Test] [TestCase(100, "z", "Sex Pistols", "Anarchy in the U.K", "Never Mind the Bollocks...")] [TestCase(10, null, null, null, null)] diff --git a/end2end/EndToEndTests/SqliteDapperTester.generated.cs b/end2end/EndToEndTests/SqliteDapperTester.generated.cs index 48eda29d..1e2d756e 100644 --- a/end2end/EndToEndTests/SqliteDapperTester.generated.cs +++ b/end2end/EndToEndTests/SqliteDapperTester.generated.cs @@ -309,7 +309,7 @@ public async Task TestNargNotNull() [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 })] [TestCase(null, null, null, new byte[] { })] [TestCase(null, null, null, null)] - public async Task TestSqliteTypes(int cInteger, decimal? cReal, string cText, byte[] cBlob) + public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob) { await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob }); var expected = new QuerySql.GetSqliteTypesRow @@ -331,6 +331,29 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesRow expected, Qu Assert.That(actual.CBlob, Is.EqualTo(expected.CBlob)); } + [Test] + [TestCase(-54355, 9787.66, "Have One On Me")] + [TestCase(null, null, null)] + public async Task TestSqliteDataTypesOverride(int? cInteger, decimal? cReal, string cText) + { + await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText }); + var expected = new QuerySql.GetSqliteFunctionsRow + { + MaxInteger = cInteger, + MaxReal = cReal, + MaxText = cText + }; + var actual = await QuerySql.GetSqliteFunctions(); + AssertSingularEquals(expected, actual); + } + + private static void AssertSingularEquals(QuerySql.GetSqliteFunctionsRow expected, QuerySql.GetSqliteFunctionsRow actual) + { + Assert.That(actual.MaxInteger, Is.EqualTo(expected.MaxInteger)); + Assert.That(actual.MaxReal, Is.EqualTo(expected.MaxReal)); + Assert.That(actual.MaxText, Is.EqualTo(expected.MaxText)); + } + [Test] [TestCase(100, 312, -7541.3309, "Johnny B. Good")] [TestCase(500, -768, 8453.5678, "Bad to the Bone")] diff --git a/end2end/EndToEndTests/SqliteTester.generated.cs b/end2end/EndToEndTests/SqliteTester.generated.cs index 4447f371..ef0d067d 100644 --- a/end2end/EndToEndTests/SqliteTester.generated.cs +++ b/end2end/EndToEndTests/SqliteTester.generated.cs @@ -309,7 +309,7 @@ public async Task TestNargNotNull() [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 })] [TestCase(null, null, null, new byte[] { })] [TestCase(null, null, null, null)] - public async Task TestSqliteTypes(int cInteger, decimal? cReal, string cText, byte[] cBlob) + public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob) { await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob }); var expected = new QuerySql.GetSqliteTypesRow @@ -331,6 +331,29 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesRow expected, Qu Assert.That(actual.CBlob, Is.EqualTo(expected.CBlob)); } + [Test] + [TestCase(-54355, 9787.66, "Have One On Me")] + [TestCase(null, null, null)] + public async Task TestSqliteDataTypesOverride(int? cInteger, decimal? cReal, string cText) + { + await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText }); + var expected = new QuerySql.GetSqliteFunctionsRow + { + MaxInteger = cInteger, + MaxReal = cReal, + MaxText = cText + }; + var actual = await QuerySql.GetSqliteFunctions(); + AssertSingularEquals(expected, actual.Value); + } + + private static void AssertSingularEquals(QuerySql.GetSqliteFunctionsRow expected, QuerySql.GetSqliteFunctionsRow actual) + { + Assert.That(actual.MaxInteger, Is.EqualTo(expected.MaxInteger)); + Assert.That(actual.MaxReal, Is.EqualTo(expected.MaxReal)); + Assert.That(actual.MaxText, Is.EqualTo(expected.MaxText)); + } + [Test] [TestCase(100, 312, -7541.3309, "Johnny B. Good")] [TestCase(500, -768, 8453.5678, "Bad to the Bone")] diff --git a/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs b/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs index 9df726f1..06d71e90 100644 --- a/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs @@ -446,6 +446,31 @@ public async Task TestMySqlStringTypes(MysqlTypesCEnum? cEnum) Assert.That(actual.CEnum, Is.EqualTo(expected.CEnum)); } + [Test] + [TestCase(-54355, 9787876578, "Scream of the Butterfly", "2025-06-29 12:00:00")] + [TestCase(null, null, null, null)] + public async Task TestMySqlDataTypesOverride(int? cInt, long? cBigint, string cVarchar, DateTime? cTimestamp) + { + await QuerySql.InsertMysqlTypes(new QuerySql.InsertMysqlTypesArgs { CInt = cInt, CBigint = cBigint, CVarchar = cVarchar, CTimestamp = cTimestamp }); + var expected = new QuerySql.GetMysqlFunctionsRow + { + MaxInt = cInt, + MaxBigint = cBigint, + MaxVarchar = cVarchar, + MaxTimestamp = cTimestamp + }; + var actual = await QuerySql.GetMysqlFunctions(); + AssertSingularEquals(expected, actual); + } + + private static void AssertSingularEquals(QuerySql.GetMysqlFunctionsRow expected, QuerySql.GetMysqlFunctionsRow actual) + { + Assert.That(actual.MaxInt, Is.EqualTo(expected.MaxInt)); + Assert.That(actual.MaxBigint, Is.EqualTo(expected.MaxBigint)); + Assert.That(actual.MaxVarchar, Is.EqualTo(expected.MaxVarchar)); + Assert.That(actual.MaxTimestamp, Is.EqualTo(expected.MaxTimestamp)); + } + [Test] public async Task TestMySqlScopedSchemaEnum() { diff --git a/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs b/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs index 3b484e08..f8a8b4ba 100644 --- a/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs @@ -446,6 +446,31 @@ public async Task TestMySqlStringTypes(MysqlTypesCEnum? cEnum) Assert.That(actual.CEnum, Is.EqualTo(expected.CEnum)); } + [Test] + [TestCase(-54355, 9787876578, "Scream of the Butterfly", "2025-06-29 12:00:00")] + [TestCase(null, null, null, null)] + public async Task TestMySqlDataTypesOverride(int? cInt, long? cBigint, string cVarchar, DateTime? cTimestamp) + { + await QuerySql.InsertMysqlTypes(new QuerySql.InsertMysqlTypesArgs { CInt = cInt, CBigint = cBigint, CVarchar = cVarchar, CTimestamp = cTimestamp }); + var expected = new QuerySql.GetMysqlFunctionsRow + { + MaxInt = cInt, + MaxBigint = cBigint, + MaxVarchar = cVarchar, + MaxTimestamp = cTimestamp + }; + var actual = await QuerySql.GetMysqlFunctions(); + AssertSingularEquals(expected, actual); + } + + private static void AssertSingularEquals(QuerySql.GetMysqlFunctionsRow expected, QuerySql.GetMysqlFunctionsRow actual) + { + Assert.That(actual.MaxInt, Is.EqualTo(expected.MaxInt)); + Assert.That(actual.MaxBigint, Is.EqualTo(expected.MaxBigint)); + Assert.That(actual.MaxVarchar, Is.EqualTo(expected.MaxVarchar)); + Assert.That(actual.MaxTimestamp, Is.EqualTo(expected.MaxTimestamp)); + } + [Test] public async Task TestMySqlScopedSchemaEnum() { diff --git a/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs b/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs index 9ae79dd1..d13f1aa4 100644 --- a/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs @@ -389,6 +389,29 @@ public async Task TestPostgresArrayTypes(byte[] cBytea, string[] cTextArray, int Assert.That(actual.CIntegerArray, Is.EqualTo(expected.CIntegerArray)); } + [Test] + [TestCase(-54355, "White Light from the Mouth of Infinity", "2022-10-2 15:44:01+09:00")] + [TestCase(null, null, null)] + public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime? cTimestamp) + { + await QuerySql.InsertPostgresTypes(new QuerySql.InsertPostgresTypesArgs { CInteger = cInteger, CVarchar = cVarchar, CTimestamp = cTimestamp }); + var expected = new QuerySql.GetPostgresFunctionsRow + { + MaxInteger = cInteger, + MaxVarchar = cVarchar, + MaxTimestamp = cTimestamp + }; + var actual = await QuerySql.GetPostgresFunctions(); + AssertSingularEquals(expected, actual); + } + + private static void AssertSingularEquals(QuerySql.GetPostgresFunctionsRow expected, QuerySql.GetPostgresFunctionsRow actual) + { + Assert.That(actual.MaxInteger, Is.EqualTo(expected.MaxInteger)); + Assert.That(actual.MaxVarchar, Is.EqualTo(expected.MaxVarchar)); + Assert.That(actual.MaxTimestamp, Is.EqualTo(expected.MaxTimestamp)); + } + [Test] [TestCase(100, "z", "Sex Pistols", "Anarchy in the U.K", "Never Mind the Bollocks...")] [TestCase(10, null, null, null, null)] diff --git a/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs b/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs index 60df12c9..9e5d6ffe 100644 --- a/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs @@ -389,6 +389,29 @@ public async Task TestPostgresArrayTypes(byte[] cBytea, string[] cTextArray, int Assert.That(actual.CIntegerArray, Is.EqualTo(expected.CIntegerArray)); } + [Test] + [TestCase(-54355, "White Light from the Mouth of Infinity", "2022-10-2 15:44:01+09:00")] + [TestCase(null, null, null)] + public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime? cTimestamp) + { + await QuerySql.InsertPostgresTypes(new QuerySql.InsertPostgresTypesArgs { CInteger = cInteger, CVarchar = cVarchar, CTimestamp = cTimestamp }); + var expected = new QuerySql.GetPostgresFunctionsRow + { + MaxInteger = cInteger, + MaxVarchar = cVarchar, + MaxTimestamp = cTimestamp + }; + var actual = await QuerySql.GetPostgresFunctions(); + AssertSingularEquals(expected, actual); + } + + private static void AssertSingularEquals(QuerySql.GetPostgresFunctionsRow expected, QuerySql.GetPostgresFunctionsRow actual) + { + Assert.That(actual.MaxInteger, Is.EqualTo(expected.MaxInteger)); + Assert.That(actual.MaxVarchar, Is.EqualTo(expected.MaxVarchar)); + Assert.That(actual.MaxTimestamp, Is.EqualTo(expected.MaxTimestamp)); + } + [Test] [TestCase(100, "z", "Sex Pistols", "Anarchy in the U.K", "Never Mind the Bollocks...")] [TestCase(10, null, null, null, null)] diff --git a/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs b/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs index 2aeee1c1..eda5b938 100644 --- a/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs @@ -309,7 +309,7 @@ public async Task TestNargNotNull() [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 })] [TestCase(null, null, null, new byte[] { })] [TestCase(null, null, null, null)] - public async Task TestSqliteTypes(int cInteger, decimal? cReal, string cText, byte[] cBlob) + public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob) { await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob }); var expected = new QuerySql.GetSqliteTypesRow @@ -331,6 +331,29 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesRow expected, Qu Assert.That(actual.CBlob, Is.EqualTo(expected.CBlob)); } + [Test] + [TestCase(-54355, 9787.66, "Have One On Me")] + [TestCase(null, null, null)] + public async Task TestSqliteDataTypesOverride(int? cInteger, decimal? cReal, string cText) + { + await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText }); + var expected = new QuerySql.GetSqliteFunctionsRow + { + MaxInteger = cInteger, + MaxReal = cReal, + MaxText = cText + }; + var actual = await QuerySql.GetSqliteFunctions(); + AssertSingularEquals(expected, actual); + } + + private static void AssertSingularEquals(QuerySql.GetSqliteFunctionsRow expected, QuerySql.GetSqliteFunctionsRow actual) + { + Assert.That(actual.MaxInteger, Is.EqualTo(expected.MaxInteger)); + Assert.That(actual.MaxReal, Is.EqualTo(expected.MaxReal)); + Assert.That(actual.MaxText, Is.EqualTo(expected.MaxText)); + } + [Test] [TestCase(100, 312, -7541.3309, "Johnny B. Good")] [TestCase(500, -768, 8453.5678, "Bad to the Bone")] diff --git a/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs b/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs index c0914770..314d02af 100644 --- a/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs @@ -309,7 +309,7 @@ public async Task TestNargNotNull() [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 })] [TestCase(null, null, null, new byte[] { })] [TestCase(null, null, null, null)] - public async Task TestSqliteTypes(int cInteger, decimal? cReal, string cText, byte[] cBlob) + public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob) { await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob }); var expected = new QuerySql.GetSqliteTypesRow @@ -331,6 +331,29 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesRow expected, Qu Assert.That(actual.CBlob, Is.EqualTo(expected.CBlob)); } + [Test] + [TestCase(-54355, 9787.66, "Have One On Me")] + [TestCase(null, null, null)] + public async Task TestSqliteDataTypesOverride(int? cInteger, decimal? cReal, string cText) + { + await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText }); + var expected = new QuerySql.GetSqliteFunctionsRow + { + MaxInteger = cInteger, + MaxReal = cReal, + MaxText = cText + }; + var actual = await QuerySql.GetSqliteFunctions(); + AssertSingularEquals(expected, actual); + } + + private static void AssertSingularEquals(QuerySql.GetSqliteFunctionsRow expected, QuerySql.GetSqliteFunctionsRow actual) + { + Assert.That(actual.MaxInteger, Is.EqualTo(expected.MaxInteger)); + Assert.That(actual.MaxReal, Is.EqualTo(expected.MaxReal)); + Assert.That(actual.MaxText, Is.EqualTo(expected.MaxText)); + } + [Test] [TestCase(100, 312, -7541.3309, "Johnny B. Good")] [TestCase(500, -768, 8453.5678, "Bad to the Bone")] diff --git a/examples/MySqlConnectorDapperExample/QuerySql.cs b/examples/MySqlConnectorDapperExample/QuerySql.cs index fe0ca15c..23cf167a 100644 --- a/examples/MySqlConnectorDapperExample/QuerySql.cs +++ b/examples/MySqlConnectorDapperExample/QuerySql.cs @@ -626,10 +626,10 @@ public class GetMysqlTypesCntRow private const string GetMysqlFunctionsSql = "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint FROM mysql_types ; SELECT LAST_INSERT_ID ( ) "; public class GetMysqlFunctionsRow { - public required object MaxInt { get; init; } - public required object MaxVarchar { get; init; } - public required object MaxTimestamp { get; init; } - public required object MaxBigint { get; init; } + public int? MaxInt { get; init; } + public string? MaxVarchar { get; init; } + public DateTime? MaxTimestamp { get; init; } + public long? MaxBigint { get; init; } }; public async Task GetMysqlFunctions() { diff --git a/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs b/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs index 051176ec..96b8c99d 100644 --- a/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs +++ b/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs @@ -626,10 +626,10 @@ public async Task GetMysqlTypesCnt() private const string GetMysqlFunctionsSql = "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint FROM mysql_types ; SELECT LAST_INSERT_ID ( ) "; public class GetMysqlFunctionsRow { - public object MaxInt { get; set; } - public object MaxVarchar { get; set; } - public object MaxTimestamp { get; set; } - public object MaxBigint { get; set; } + public int? MaxInt { get; set; } + public string MaxVarchar { get; set; } + public DateTime? MaxTimestamp { get; set; } + public long? MaxBigint { get; set; } }; public async Task GetMysqlFunctions() { diff --git a/examples/MySqlConnectorExample/QuerySql.cs b/examples/MySqlConnectorExample/QuerySql.cs index a560013d..26d434de 100644 --- a/examples/MySqlConnectorExample/QuerySql.cs +++ b/examples/MySqlConnectorExample/QuerySql.cs @@ -587,7 +587,7 @@ public async Task InsertMysqlTypesBatch(List args) } private const string GetMysqlFunctionsSql = "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint FROM mysql_types "; - public readonly record struct GetMysqlFunctionsRow(object MaxInt, object MaxVarchar, object MaxTimestamp, object MaxBigint); + public readonly record struct GetMysqlFunctionsRow(int? MaxInt, string? MaxVarchar, DateTime? MaxTimestamp, long? MaxBigint); public async Task GetMysqlFunctions() { using (var connection = new MySqlConnection(ConnectionString)) @@ -601,10 +601,10 @@ public async Task InsertMysqlTypesBatch(List args) { return new GetMysqlFunctionsRow { - MaxInt = reader.GetInt32(0), - MaxVarchar = reader.GetString(1), - MaxTimestamp = reader.GetDateTime(2), - MaxBigint = reader.GetInt64(3) + MaxInt = reader.IsDBNull(0) ? null : reader.GetInt32(0), + MaxVarchar = reader.IsDBNull(1) ? null : reader.GetString(1), + MaxTimestamp = reader.IsDBNull(2) ? null : reader.GetDateTime(2), + MaxBigint = reader.IsDBNull(3) ? null : reader.GetInt64(3) }; } } diff --git a/examples/MySqlConnectorLegacyExample/QuerySql.cs b/examples/MySqlConnectorLegacyExample/QuerySql.cs index 6396d91d..d470529a 100644 --- a/examples/MySqlConnectorLegacyExample/QuerySql.cs +++ b/examples/MySqlConnectorLegacyExample/QuerySql.cs @@ -821,10 +821,10 @@ public async Task GetMysqlTypesCnt() private const string GetMysqlFunctionsSql = "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint FROM mysql_types "; public class GetMysqlFunctionsRow { - public object MaxInt { get; set; } - public object MaxVarchar { get; set; } - public object MaxTimestamp { get; set; } - public object MaxBigint { get; set; } + public int? MaxInt { get; set; } + public string MaxVarchar { get; set; } + public DateTime? MaxTimestamp { get; set; } + public long? MaxBigint { get; set; } }; public async Task GetMysqlFunctions() { @@ -839,10 +839,10 @@ public async Task GetMysqlFunctions() { return new GetMysqlFunctionsRow { - MaxInt = reader.GetInt32(0), - MaxVarchar = reader.GetString(1), - MaxTimestamp = reader.GetDateTime(2), - MaxBigint = reader.GetInt64(3) + MaxInt = reader.IsDBNull(0) ? (int? )null : reader.GetInt32(0), + MaxVarchar = reader.IsDBNull(1) ? null : reader.GetString(1), + MaxTimestamp = reader.IsDBNull(2) ? (DateTime? )null : reader.GetDateTime(2), + MaxBigint = reader.IsDBNull(3) ? (long? )null : reader.GetInt64(3) }; } } diff --git a/examples/NpgsqlDapperExample/QuerySql.cs b/examples/NpgsqlDapperExample/QuerySql.cs index 906fb00d..774ce22a 100644 --- a/examples/NpgsqlDapperExample/QuerySql.cs +++ b/examples/NpgsqlDapperExample/QuerySql.cs @@ -529,9 +529,9 @@ public class GetPostgresTypesCntRow private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; public class GetPostgresFunctionsRow { - public required object MaxInteger { get; init; } - public required object MaxVarchar { get; init; } - public required object MaxTimestamp { get; init; } + public int? MaxInteger { get; init; } + public string? MaxVarchar { get; init; } + public DateTime? MaxTimestamp { get; init; } }; public async Task GetPostgresFunctions() { diff --git a/examples/NpgsqlDapperLegacyExample/QuerySql.cs b/examples/NpgsqlDapperLegacyExample/QuerySql.cs index 13a43a35..e99a7433 100644 --- a/examples/NpgsqlDapperLegacyExample/QuerySql.cs +++ b/examples/NpgsqlDapperLegacyExample/QuerySql.cs @@ -530,9 +530,9 @@ public async Task GetPostgresTypesCnt() private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; public class GetPostgresFunctionsRow { - public object MaxInteger { get; set; } - public object MaxVarchar { get; set; } - public object MaxTimestamp { get; set; } + public int? MaxInteger { get; set; } + public string MaxVarchar { get; set; } + public DateTime? MaxTimestamp { get; set; } }; public async Task GetPostgresFunctions() { diff --git a/examples/NpgsqlExample/QuerySql.cs b/examples/NpgsqlExample/QuerySql.cs index 75a61dcf..c7fde1fb 100644 --- a/examples/NpgsqlExample/QuerySql.cs +++ b/examples/NpgsqlExample/QuerySql.cs @@ -506,7 +506,7 @@ public async Task InsertPostgresTypesBatch(List ar } private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; - public readonly record struct GetPostgresFunctionsRow(object MaxInteger, object MaxVarchar, object MaxTimestamp); + public readonly record struct GetPostgresFunctionsRow(int? MaxInteger, string? MaxVarchar, DateTime? MaxTimestamp); public async Task GetPostgresFunctions() { using (var connection = NpgsqlDataSource.Create(ConnectionString)) @@ -519,9 +519,9 @@ public async Task InsertPostgresTypesBatch(List ar { return new GetPostgresFunctionsRow { - MaxInteger = reader.GetInt32(0), - MaxVarchar = reader.GetString(1), - MaxTimestamp = reader.GetDateTime(2) + MaxInteger = reader.IsDBNull(0) ? null : reader.GetInt32(0), + MaxVarchar = reader.IsDBNull(1) ? null : reader.GetString(1), + MaxTimestamp = reader.IsDBNull(2) ? null : reader.GetDateTime(2) }; } } diff --git a/examples/NpgsqlLegacyExample/QuerySql.cs b/examples/NpgsqlLegacyExample/QuerySql.cs index 957e1d0d..e49d135e 100644 --- a/examples/NpgsqlLegacyExample/QuerySql.cs +++ b/examples/NpgsqlLegacyExample/QuerySql.cs @@ -690,9 +690,9 @@ public async Task GetPostgresTypesCnt() private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; public class GetPostgresFunctionsRow { - public object MaxInteger { get; set; } - public object MaxVarchar { get; set; } - public object MaxTimestamp { get; set; } + public int? MaxInteger { get; set; } + public string MaxVarchar { get; set; } + public DateTime? MaxTimestamp { get; set; } }; public async Task GetPostgresFunctions() { @@ -706,9 +706,9 @@ public async Task GetPostgresFunctions() { return new GetPostgresFunctionsRow { - MaxInteger = reader.GetInt32(0), - MaxVarchar = reader.GetString(1), - MaxTimestamp = reader.GetDateTime(2) + MaxInteger = reader.IsDBNull(0) ? (int? )null : reader.GetInt32(0), + MaxVarchar = reader.IsDBNull(1) ? null : reader.GetString(1), + MaxTimestamp = reader.IsDBNull(2) ? (DateTime? )null : reader.GetDateTime(2) }; } } diff --git a/examples/SqliteDapperExample/QuerySql.cs b/examples/SqliteDapperExample/QuerySql.cs index fa45d989..a11b1368 100644 --- a/examples/SqliteDapperExample/QuerySql.cs +++ b/examples/SqliteDapperExample/QuerySql.cs @@ -428,10 +428,11 @@ public class GetSqliteTypesCntRow } } - private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text FROM types_sqlite "; + private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text FROM types_sqlite "; public class GetSqliteFunctionsRow { - public object? MaxInteger { get; init; } + public int? MaxInteger { get; init; } + public decimal? MaxReal { get; init; } public object? MaxText { get; init; } }; public async Task GetSqliteFunctions() diff --git a/examples/SqliteDapperExample/request.json b/examples/SqliteDapperExample/request.json index 4044d5fd..6bcb804a 100644 --- a/examples/SqliteDapperExample/request.json +++ b/examples/SqliteDapperExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteDapperExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOnRydWV9", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6dHJ1ZX0=", "process": { "cmd": "./dist/LocalRunner" } @@ -1108,7 +1108,7 @@ "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text\nFROM types_sqlite", + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text\nFROM types_sqlite", "name": "GetSqliteFunctions", "cmd": ":one", "columns": [ @@ -1120,6 +1120,14 @@ "name": "any" } }, + { + "name": "max_real", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, { "name": "max_text", "length": -1, diff --git a/examples/SqliteDapperLegacyExample/QuerySql.cs b/examples/SqliteDapperLegacyExample/QuerySql.cs index 2608a370..1bfa5ac0 100644 --- a/examples/SqliteDapperLegacyExample/QuerySql.cs +++ b/examples/SqliteDapperLegacyExample/QuerySql.cs @@ -429,10 +429,11 @@ public async Task GetSqliteTypesCnt() } } - private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text FROM types_sqlite "; + private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text FROM types_sqlite "; public class GetSqliteFunctionsRow { - public object MaxInteger { get; set; } + public int? MaxInteger { get; set; } + public decimal? MaxReal { get; set; } public object MaxText { get; set; } }; public async Task GetSqliteFunctions() diff --git a/examples/SqliteDapperLegacyExample/request.json b/examples/SqliteDapperLegacyExample/request.json index 5b7163a2..6b57e8f1 100644 --- a/examples/SqliteDapperLegacyExample/request.json +++ b/examples/SqliteDapperLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteDapperLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXRzdGFuZGFyZDIuMCIsInVzZURhcHBlciI6dHJ1ZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", "process": { "cmd": "./dist/LocalRunner" } @@ -1108,7 +1108,7 @@ "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text\nFROM types_sqlite", + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text\nFROM types_sqlite", "name": "GetSqliteFunctions", "cmd": ":one", "columns": [ @@ -1120,6 +1120,14 @@ "name": "any" } }, + { + "name": "max_real", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, { "name": "max_text", "length": -1, diff --git a/examples/SqliteExample/QuerySql.cs b/examples/SqliteExample/QuerySql.cs index faeba5eb..527af805 100644 --- a/examples/SqliteExample/QuerySql.cs +++ b/examples/SqliteExample/QuerySql.cs @@ -448,8 +448,8 @@ public async Task InsertSqliteTypesBatch(List args) return null; } - private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text FROM types_sqlite "; - public readonly record struct GetSqliteFunctionsRow(object? MaxInteger, object? MaxText); + private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text FROM types_sqlite "; + public readonly record struct GetSqliteFunctionsRow(int? MaxInteger, decimal? MaxReal, object? MaxText); public async Task GetSqliteFunctions() { using (var connection = new SqliteConnection(ConnectionString)) @@ -464,7 +464,8 @@ public async Task InsertSqliteTypesBatch(List args) return new GetSqliteFunctionsRow { MaxInteger = reader.IsDBNull(0) ? null : reader.GetInt32(0), - MaxText = reader.IsDBNull(1) ? null : reader.GetValue(1) + MaxReal = reader.IsDBNull(1) ? null : reader.GetDecimal(1), + MaxText = reader.IsDBNull(2) ? null : reader.GetValue(2) }; } } diff --git a/examples/SqliteExample/request.json b/examples/SqliteExample/request.json index 38a3ccdb..a3c4fc5f 100644 --- a/examples/SqliteExample/request.json +++ b/examples/SqliteExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6ZmFsc2V9", "process": { "cmd": "./dist/LocalRunner" } @@ -1108,7 +1108,7 @@ "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text\nFROM types_sqlite", + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text\nFROM types_sqlite", "name": "GetSqliteFunctions", "cmd": ":one", "columns": [ @@ -1120,6 +1120,14 @@ "name": "any" } }, + { + "name": "max_real", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, { "name": "max_text", "length": -1, diff --git a/examples/SqliteLegacyExample/QuerySql.cs b/examples/SqliteLegacyExample/QuerySql.cs index cb652c75..33cb7cc5 100644 --- a/examples/SqliteLegacyExample/QuerySql.cs +++ b/examples/SqliteLegacyExample/QuerySql.cs @@ -561,10 +561,11 @@ public async Task GetSqliteTypesCnt() return null; } - private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text FROM types_sqlite "; + private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text FROM types_sqlite "; public class GetSqliteFunctionsRow { - public object MaxInteger { get; set; } + public int? MaxInteger { get; set; } + public decimal? MaxReal { get; set; } public object MaxText { get; set; } }; public async Task GetSqliteFunctions() @@ -581,7 +582,8 @@ public async Task GetSqliteFunctions() return new GetSqliteFunctionsRow { MaxInteger = reader.IsDBNull(0) ? (int? )null : reader.GetInt32(0), - MaxText = reader.IsDBNull(1) ? null : reader.GetValue(1) + MaxReal = reader.IsDBNull(1) ? (decimal? )null : reader.GetDecimal(1), + MaxText = reader.IsDBNull(2) ? null : reader.GetValue(2) }; } } diff --git a/examples/SqliteLegacyExample/request.json b/examples/SqliteLegacyExample/request.json index 7d61b805..9c7f30b2 100644 --- a/examples/SqliteLegacyExample/request.json +++ b/examples/SqliteLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXRzdGFuZGFyZDIuMCIsInVzZURhcHBlciI6ZmFsc2V9", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", "process": { "cmd": "./dist/LocalRunner" } @@ -1108,7 +1108,7 @@ "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text\nFROM types_sqlite", + "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text\nFROM types_sqlite", "name": "GetSqliteFunctions", "cmd": ":one", "columns": [ @@ -1120,6 +1120,14 @@ "name": "any" } }, + { + "name": "max_real", + "length": -1, + "isFuncCall": true, + "type": { + "name": "any" + } + }, { "name": "max_text", "length": -1, diff --git a/examples/config/sqlite/query.sql b/examples/config/sqlite/query.sql index c7489bf7..04497ff6 100644 --- a/examples/config/sqlite/query.sql +++ b/examples/config/sqlite/query.sql @@ -67,7 +67,7 @@ GROUP BY c_integer, c_real, c_text, c_blob LIMIT 1; -- name: GetSqliteFunctions :one -SELECT MAX(c_integer) AS max_integer, MAX(c_text) AS max_text +SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text FROM types_sqlite; -- name: DeleteAllSqliteTypes :exec diff --git a/scripts/sync_sqlc_options.sh b/scripts/sync_sqlc_options.sh new file mode 100755 index 00000000..a047500b --- /dev/null +++ b/scripts/sync_sqlc_options.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +set -e + +CI_YAML="sqlc.ci.yaml" +LOCAL_YAML="sqlc.local.yaml" +TMP_YAML="${LOCAL_YAML}.tmp" + +cp "$LOCAL_YAML" "$TMP_YAML" + +sql_count=$(yq '.sql | length' "$CI_YAML") +for ((i=0; i Date: Wed, 2 Jul 2025 18:53:00 +0200 Subject: [PATCH 05/11] feat: add not null option in type override --- Drivers/DbDriver.cs | 5 ++- PluginOptions/Options.cs | 2 + PluginOptions/RawOptions.cs | 3 ++ .../EndToEndScaffold/Templates/MySqlTests.cs | 6 +-- .../Templates/PostgresTests.cs | 4 +- .../EndToEndScaffold/Templates/SqliteTests.cs | 4 +- .../MySqlConnectorDapperTester.generated.cs | 4 +- .../MySqlConnectorTester.generated.cs | 4 +- .../NpgsqlDapperTester.generated.cs | 4 +- .../EndToEndTests/NpgsqlTester.generated.cs | 4 +- .../SqliteDapperTester.generated.cs | 4 +- .../EndToEndTests/SqliteTester.generated.cs | 4 +- .../MySqlConnectorDapperTester.generated.cs | 4 +- .../MySqlConnectorTester.generated.cs | 4 +- .../NpgsqlDapperTester.generated.cs | 4 +- .../NpgsqlTester.generated.cs | 4 +- .../SqliteDapperTester.generated.cs | 4 +- .../SqliteTester.generated.cs | 4 +- .../MySqlConnectorDapperExample/QuerySql.cs | 4 +- .../MySqlConnectorDapperExample/request.json | 2 +- .../QuerySql.cs | 4 +- .../request.json | 2 +- examples/MySqlConnectorExample/QuerySql.cs | 6 +-- examples/MySqlConnectorExample/request.json | 2 +- .../MySqlConnectorLegacyExample/QuerySql.cs | 8 ++-- .../MySqlConnectorLegacyExample/request.json | 2 +- examples/NpgsqlDapperExample/QuerySql.cs | 2 +- examples/NpgsqlDapperExample/request.json | 2 +- .../NpgsqlDapperLegacyExample/QuerySql.cs | 2 +- .../NpgsqlDapperLegacyExample/request.json | 2 +- examples/NpgsqlExample/QuerySql.cs | 4 +- examples/NpgsqlExample/request.json | 2 +- examples/NpgsqlLegacyExample/QuerySql.cs | 4 +- examples/NpgsqlLegacyExample/request.json | 2 +- examples/SqliteDapperExample/QuerySql.cs | 2 +- examples/SqliteDapperExample/request.json | 2 +- .../SqliteDapperLegacyExample/QuerySql.cs | 2 +- .../SqliteDapperLegacyExample/request.json | 2 +- examples/SqliteExample/QuerySql.cs | 4 +- examples/SqliteExample/request.json | 2 +- examples/SqliteLegacyExample/QuerySql.cs | 4 +- examples/SqliteLegacyExample/request.json | 2 +- sqlc.ci.yaml | 42 ++++++++++++++++++- sqlc.local.yaml | 40 ++++++++++++++++++ 44 files changed, 156 insertions(+), 68 deletions(-) diff --git a/Drivers/DbDriver.cs b/Drivers/DbDriver.cs index be86e317..46c3f310 100644 --- a/Drivers/DbDriver.cs +++ b/Drivers/DbDriver.cs @@ -300,6 +300,9 @@ public bool IsColumnNotNull(Column column, Query? query) { if (query is null) return column.NotNull; - return column.NotNull && FindOverrideForQueryColumn(query, column) is null; + var overrideColumn = FindOverrideForQueryColumn(query, column); + if (overrideColumn is not null) + return overrideColumn.CsharpType.NotNull; + return column.NotNull; } } \ No newline at end of file diff --git a/PluginOptions/Options.cs b/PluginOptions/Options.cs index 28a737df..77da0dce 100644 --- a/PluginOptions/Options.cs +++ b/PluginOptions/Options.cs @@ -41,6 +41,8 @@ public Options(GenerateRequest generateRequest) public string NamespaceName { get; } + public bool NotNull { get; } + public List Overrides { get; } public bool DebugRequest { get; } diff --git a/PluginOptions/RawOptions.cs b/PluginOptions/RawOptions.cs index f2ea280b..00cd335c 100644 --- a/PluginOptions/RawOptions.cs +++ b/PluginOptions/RawOptions.cs @@ -43,4 +43,7 @@ public class CsharpTypeOption { [JsonPropertyName("type")] public string Type { get; init; } = string.Empty; + + [JsonPropertyName("notNull")] + public bool NotNull { get; init; } = false; } \ No newline at end of file diff --git a/end2end/EndToEndScaffold/Templates/MySqlTests.cs b/end2end/EndToEndScaffold/Templates/MySqlTests.cs index 06502ede..99b0e400 100644 --- a/end2end/EndToEndScaffold/Templates/MySqlTests.cs +++ b/end2end/EndToEndScaffold/Templates/MySqlTests.cs @@ -586,12 +586,12 @@ private static bool SingularEquals(QuerySql.GetFirstExtendedBioByTypeRow x, Quer Impl = $$""" [Test] [TestCase(-54355, 9787876578, "Scream of the Butterfly", "2025-06-29 12:00:00")] - [TestCase(null, null, null, null)] + [TestCase(null, 0, null, "1971-01-01 00:00:00")] public async Task TestMySqlDataTypesOverride( int? cInt, - long? cBigint, + long cBigint, string cVarchar, - DateTime? cTimestamp) + DateTime cTimestamp) { await QuerySql.InsertMysqlTypes(new QuerySql.InsertMysqlTypesArgs { diff --git a/end2end/EndToEndScaffold/Templates/PostgresTests.cs b/end2end/EndToEndScaffold/Templates/PostgresTests.cs index 75e89007..1d93d048 100644 --- a/end2end/EndToEndScaffold/Templates/PostgresTests.cs +++ b/end2end/EndToEndScaffold/Templates/PostgresTests.cs @@ -489,11 +489,11 @@ public async Task TestPostgresGeoTypes(NpgsqlPoint? cPoint, NpgsqlLine? cLine, N Impl = $$""" [Test] [TestCase(-54355, "White Light from the Mouth of Infinity", "2022-10-2 15:44:01+09:00")] - [TestCase(null, null, null)] + [TestCase(null, null, "1970-01-01 00:00:00")] public async Task TestPostgresDataTypesOverride( int? cInteger, string cVarchar, - DateTime? cTimestamp) + DateTime cTimestamp) { await QuerySql.InsertPostgresTypes(new QuerySql.InsertPostgresTypesArgs { diff --git a/end2end/EndToEndScaffold/Templates/SqliteTests.cs b/end2end/EndToEndScaffold/Templates/SqliteTests.cs index 726eea4d..6a20b829 100644 --- a/end2end/EndToEndScaffold/Templates/SqliteTests.cs +++ b/end2end/EndToEndScaffold/Templates/SqliteTests.cs @@ -94,10 +94,10 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesCntRow expected, Impl = $$""" [Test] [TestCase(-54355, 9787.66, "Have One On Me")] - [TestCase(null, null, null)] + [TestCase(null, 0.0, null)] public async Task TestSqliteDataTypesOverride( int? cInteger, - decimal? cReal, + decimal cReal, string cText) { await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs diff --git a/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs b/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs index c66ffdab..f195ae6c 100644 --- a/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs +++ b/end2end/EndToEndTests/MySqlConnectorDapperTester.generated.cs @@ -448,8 +448,8 @@ public async Task TestMySqlStringTypes(MysqlTypesCEnum? cEnum) [Test] [TestCase(-54355, 9787876578, "Scream of the Butterfly", "2025-06-29 12:00:00")] - [TestCase(null, null, null, null)] - public async Task TestMySqlDataTypesOverride(int? cInt, long? cBigint, string cVarchar, DateTime? cTimestamp) + [TestCase(null, 0, null, "1971-01-01 00:00:00")] + public async Task TestMySqlDataTypesOverride(int? cInt, long cBigint, string cVarchar, DateTime cTimestamp) { await QuerySql.InsertMysqlTypes(new QuerySql.InsertMysqlTypesArgs { CInt = cInt, CBigint = cBigint, CVarchar = cVarchar, CTimestamp = cTimestamp }); var expected = new QuerySql.GetMysqlFunctionsRow diff --git a/end2end/EndToEndTests/MySqlConnectorTester.generated.cs b/end2end/EndToEndTests/MySqlConnectorTester.generated.cs index c5149c16..b9747a47 100644 --- a/end2end/EndToEndTests/MySqlConnectorTester.generated.cs +++ b/end2end/EndToEndTests/MySqlConnectorTester.generated.cs @@ -448,8 +448,8 @@ public async Task TestMySqlStringTypes(MysqlTypesCEnum? cEnum) [Test] [TestCase(-54355, 9787876578, "Scream of the Butterfly", "2025-06-29 12:00:00")] - [TestCase(null, null, null, null)] - public async Task TestMySqlDataTypesOverride(int? cInt, long? cBigint, string cVarchar, DateTime? cTimestamp) + [TestCase(null, 0, null, "1971-01-01 00:00:00")] + public async Task TestMySqlDataTypesOverride(int? cInt, long cBigint, string cVarchar, DateTime cTimestamp) { await QuerySql.InsertMysqlTypes(new QuerySql.InsertMysqlTypesArgs { CInt = cInt, CBigint = cBigint, CVarchar = cVarchar, CTimestamp = cTimestamp }); var expected = new QuerySql.GetMysqlFunctionsRow diff --git a/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs b/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs index 6895228a..28188d5a 100644 --- a/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs +++ b/end2end/EndToEndTests/NpgsqlDapperTester.generated.cs @@ -391,8 +391,8 @@ public async Task TestPostgresArrayTypes(byte[] cBytea, string[] cTextArray, int [Test] [TestCase(-54355, "White Light from the Mouth of Infinity", "2022-10-2 15:44:01+09:00")] - [TestCase(null, null, null)] - public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime? cTimestamp) + [TestCase(null, null, "1970-01-01 00:00:00")] + public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime cTimestamp) { await QuerySql.InsertPostgresTypes(new QuerySql.InsertPostgresTypesArgs { CInteger = cInteger, CVarchar = cVarchar, CTimestamp = cTimestamp }); var expected = new QuerySql.GetPostgresFunctionsRow diff --git a/end2end/EndToEndTests/NpgsqlTester.generated.cs b/end2end/EndToEndTests/NpgsqlTester.generated.cs index 48afd5fe..b70f16d8 100644 --- a/end2end/EndToEndTests/NpgsqlTester.generated.cs +++ b/end2end/EndToEndTests/NpgsqlTester.generated.cs @@ -391,8 +391,8 @@ public async Task TestPostgresArrayTypes(byte[] cBytea, string[] cTextArray, int [Test] [TestCase(-54355, "White Light from the Mouth of Infinity", "2022-10-2 15:44:01+09:00")] - [TestCase(null, null, null)] - public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime? cTimestamp) + [TestCase(null, null, "1970-01-01 00:00:00")] + public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime cTimestamp) { await QuerySql.InsertPostgresTypes(new QuerySql.InsertPostgresTypesArgs { CInteger = cInteger, CVarchar = cVarchar, CTimestamp = cTimestamp }); var expected = new QuerySql.GetPostgresFunctionsRow diff --git a/end2end/EndToEndTests/SqliteDapperTester.generated.cs b/end2end/EndToEndTests/SqliteDapperTester.generated.cs index 1e2d756e..c6e3a3bd 100644 --- a/end2end/EndToEndTests/SqliteDapperTester.generated.cs +++ b/end2end/EndToEndTests/SqliteDapperTester.generated.cs @@ -333,8 +333,8 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesRow expected, Qu [Test] [TestCase(-54355, 9787.66, "Have One On Me")] - [TestCase(null, null, null)] - public async Task TestSqliteDataTypesOverride(int? cInteger, decimal? cReal, string cText) + [TestCase(null, 0.0, null)] + public async Task TestSqliteDataTypesOverride(int? cInteger, decimal cReal, string cText) { await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText }); var expected = new QuerySql.GetSqliteFunctionsRow diff --git a/end2end/EndToEndTests/SqliteTester.generated.cs b/end2end/EndToEndTests/SqliteTester.generated.cs index ef0d067d..d0fedd23 100644 --- a/end2end/EndToEndTests/SqliteTester.generated.cs +++ b/end2end/EndToEndTests/SqliteTester.generated.cs @@ -333,8 +333,8 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesRow expected, Qu [Test] [TestCase(-54355, 9787.66, "Have One On Me")] - [TestCase(null, null, null)] - public async Task TestSqliteDataTypesOverride(int? cInteger, decimal? cReal, string cText) + [TestCase(null, 0.0, null)] + public async Task TestSqliteDataTypesOverride(int? cInteger, decimal cReal, string cText) { await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText }); var expected = new QuerySql.GetSqliteFunctionsRow diff --git a/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs b/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs index 06d71e90..ca83b51e 100644 --- a/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.generated.cs @@ -448,8 +448,8 @@ public async Task TestMySqlStringTypes(MysqlTypesCEnum? cEnum) [Test] [TestCase(-54355, 9787876578, "Scream of the Butterfly", "2025-06-29 12:00:00")] - [TestCase(null, null, null, null)] - public async Task TestMySqlDataTypesOverride(int? cInt, long? cBigint, string cVarchar, DateTime? cTimestamp) + [TestCase(null, 0, null, "1971-01-01 00:00:00")] + public async Task TestMySqlDataTypesOverride(int? cInt, long cBigint, string cVarchar, DateTime cTimestamp) { await QuerySql.InsertMysqlTypes(new QuerySql.InsertMysqlTypesArgs { CInt = cInt, CBigint = cBigint, CVarchar = cVarchar, CTimestamp = cTimestamp }); var expected = new QuerySql.GetMysqlFunctionsRow diff --git a/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs b/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs index f8a8b4ba..8b34b643 100644 --- a/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/MySqlConnectorTester.generated.cs @@ -448,8 +448,8 @@ public async Task TestMySqlStringTypes(MysqlTypesCEnum? cEnum) [Test] [TestCase(-54355, 9787876578, "Scream of the Butterfly", "2025-06-29 12:00:00")] - [TestCase(null, null, null, null)] - public async Task TestMySqlDataTypesOverride(int? cInt, long? cBigint, string cVarchar, DateTime? cTimestamp) + [TestCase(null, 0, null, "1971-01-01 00:00:00")] + public async Task TestMySqlDataTypesOverride(int? cInt, long cBigint, string cVarchar, DateTime cTimestamp) { await QuerySql.InsertMysqlTypes(new QuerySql.InsertMysqlTypesArgs { CInt = cInt, CBigint = cBigint, CVarchar = cVarchar, CTimestamp = cTimestamp }); var expected = new QuerySql.GetMysqlFunctionsRow diff --git a/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs b/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs index d13f1aa4..0e312af0 100644 --- a/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs @@ -391,8 +391,8 @@ public async Task TestPostgresArrayTypes(byte[] cBytea, string[] cTextArray, int [Test] [TestCase(-54355, "White Light from the Mouth of Infinity", "2022-10-2 15:44:01+09:00")] - [TestCase(null, null, null)] - public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime? cTimestamp) + [TestCase(null, null, "1970-01-01 00:00:00")] + public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime cTimestamp) { await QuerySql.InsertPostgresTypes(new QuerySql.InsertPostgresTypesArgs { CInteger = cInteger, CVarchar = cVarchar, CTimestamp = cTimestamp }); var expected = new QuerySql.GetPostgresFunctionsRow diff --git a/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs b/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs index 9e5d6ffe..1e26d580 100644 --- a/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs @@ -391,8 +391,8 @@ public async Task TestPostgresArrayTypes(byte[] cBytea, string[] cTextArray, int [Test] [TestCase(-54355, "White Light from the Mouth of Infinity", "2022-10-2 15:44:01+09:00")] - [TestCase(null, null, null)] - public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime? cTimestamp) + [TestCase(null, null, "1970-01-01 00:00:00")] + public async Task TestPostgresDataTypesOverride(int? cInteger, string cVarchar, DateTime cTimestamp) { await QuerySql.InsertPostgresTypes(new QuerySql.InsertPostgresTypesArgs { CInteger = cInteger, CVarchar = cVarchar, CTimestamp = cTimestamp }); var expected = new QuerySql.GetPostgresFunctionsRow diff --git a/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs b/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs index eda5b938..d83f2692 100644 --- a/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs @@ -333,8 +333,8 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesRow expected, Qu [Test] [TestCase(-54355, 9787.66, "Have One On Me")] - [TestCase(null, null, null)] - public async Task TestSqliteDataTypesOverride(int? cInteger, decimal? cReal, string cText) + [TestCase(null, 0.0, null)] + public async Task TestSqliteDataTypesOverride(int? cInteger, decimal cReal, string cText) { await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText }); var expected = new QuerySql.GetSqliteFunctionsRow diff --git a/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs b/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs index 314d02af..77d7dae6 100644 --- a/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs @@ -333,8 +333,8 @@ private static void AssertSingularEquals(QuerySql.GetSqliteTypesRow expected, Qu [Test] [TestCase(-54355, 9787.66, "Have One On Me")] - [TestCase(null, null, null)] - public async Task TestSqliteDataTypesOverride(int? cInteger, decimal? cReal, string cText) + [TestCase(null, 0.0, null)] + public async Task TestSqliteDataTypesOverride(int? cInteger, decimal cReal, string cText) { await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText }); var expected = new QuerySql.GetSqliteFunctionsRow diff --git a/examples/MySqlConnectorDapperExample/QuerySql.cs b/examples/MySqlConnectorDapperExample/QuerySql.cs index 23cf167a..9cea294e 100644 --- a/examples/MySqlConnectorDapperExample/QuerySql.cs +++ b/examples/MySqlConnectorDapperExample/QuerySql.cs @@ -628,8 +628,8 @@ public class GetMysqlFunctionsRow { public int? MaxInt { get; init; } public string? MaxVarchar { get; init; } - public DateTime? MaxTimestamp { get; init; } - public long? MaxBigint { get; init; } + public required DateTime MaxTimestamp { get; init; } + public required long MaxBigint { get; init; } }; public async Task GetMysqlFunctions() { diff --git a/examples/MySqlConnectorDapperExample/request.json b/examples/MySqlConnectorDapperExample/request.json index b5444d0a..552a3a2b 100644 --- a/examples/MySqlConnectorDapperExample/request.json +++ b/examples/MySqlConnectorDapperExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/MySqlConnectorDapperExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JEYXBwZXJFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF90aW1lc3RhbXAiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfYmlnaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImxvbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOnRydWV9", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JEYXBwZXJFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0TXlzcWxGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJEYXRlVGltZSJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF9iaWdpbnQiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjp0cnVlLCJ0eXBlIjoibG9uZyJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6dHJ1ZX0=", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs b/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs index 96b8c99d..62444c8b 100644 --- a/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs +++ b/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs @@ -628,8 +628,8 @@ public class GetMysqlFunctionsRow { public int? MaxInt { get; set; } public string MaxVarchar { get; set; } - public DateTime? MaxTimestamp { get; set; } - public long? MaxBigint { get; set; } + public DateTime MaxTimestamp { get; set; } + public long MaxBigint { get; set; } }; public async Task GetMysqlFunctions() { diff --git a/examples/MySqlConnectorDapperLegacyExample/request.json b/examples/MySqlConnectorDapperLegacyExample/request.json index 62907b54..c49c73ac 100644 --- a/examples/MySqlConnectorDapperLegacyExample/request.json +++ b/examples/MySqlConnectorDapperLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/MySqlConnectorDapperLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JEYXBwZXJMZWdhY3lFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF90aW1lc3RhbXAiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfYmlnaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImxvbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXRzdGFuZGFyZDIuMCIsInVzZURhcHBlciI6dHJ1ZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JEYXBwZXJMZWdhY3lFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0TXlzcWxGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJEYXRlVGltZSJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF9iaWdpbnQiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjp0cnVlLCJ0eXBlIjoibG9uZyJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/MySqlConnectorExample/QuerySql.cs b/examples/MySqlConnectorExample/QuerySql.cs index 26d434de..61f93606 100644 --- a/examples/MySqlConnectorExample/QuerySql.cs +++ b/examples/MySqlConnectorExample/QuerySql.cs @@ -587,7 +587,7 @@ public async Task InsertMysqlTypesBatch(List args) } private const string GetMysqlFunctionsSql = "SELECT MAX(c_int) AS max_int, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp, max(c_bigint) as max_bigint FROM mysql_types "; - public readonly record struct GetMysqlFunctionsRow(int? MaxInt, string? MaxVarchar, DateTime? MaxTimestamp, long? MaxBigint); + public readonly record struct GetMysqlFunctionsRow(int? MaxInt, string? MaxVarchar, DateTime MaxTimestamp, long MaxBigint); public async Task GetMysqlFunctions() { using (var connection = new MySqlConnection(ConnectionString)) @@ -603,8 +603,8 @@ public async Task InsertMysqlTypesBatch(List args) { MaxInt = reader.IsDBNull(0) ? null : reader.GetInt32(0), MaxVarchar = reader.IsDBNull(1) ? null : reader.GetString(1), - MaxTimestamp = reader.IsDBNull(2) ? null : reader.GetDateTime(2), - MaxBigint = reader.IsDBNull(3) ? null : reader.GetInt64(3) + MaxTimestamp = reader.GetDateTime(2), + MaxBigint = reader.GetInt64(3) }; } } diff --git a/examples/MySqlConnectorExample/request.json b/examples/MySqlConnectorExample/request.json index a2d4905e..c55fb2c4 100644 --- a/examples/MySqlConnectorExample/request.json +++ b/examples/MySqlConnectorExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/MySqlConnectorExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF90aW1lc3RhbXAiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfYmlnaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImxvbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0TXlzcWxGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJEYXRlVGltZSJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF9iaWdpbnQiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjp0cnVlLCJ0eXBlIjoibG9uZyJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6ZmFsc2V9", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/MySqlConnectorLegacyExample/QuerySql.cs b/examples/MySqlConnectorLegacyExample/QuerySql.cs index d470529a..149156b2 100644 --- a/examples/MySqlConnectorLegacyExample/QuerySql.cs +++ b/examples/MySqlConnectorLegacyExample/QuerySql.cs @@ -823,8 +823,8 @@ public class GetMysqlFunctionsRow { public int? MaxInt { get; set; } public string MaxVarchar { get; set; } - public DateTime? MaxTimestamp { get; set; } - public long? MaxBigint { get; set; } + public DateTime MaxTimestamp { get; set; } + public long MaxBigint { get; set; } }; public async Task GetMysqlFunctions() { @@ -841,8 +841,8 @@ public async Task GetMysqlFunctions() { MaxInt = reader.IsDBNull(0) ? (int? )null : reader.GetInt32(0), MaxVarchar = reader.IsDBNull(1) ? null : reader.GetString(1), - MaxTimestamp = reader.IsDBNull(2) ? (DateTime? )null : reader.GetDateTime(2), - MaxBigint = reader.IsDBNull(3) ? (long? )null : reader.GetInt64(3) + MaxTimestamp = reader.GetDateTime(2), + MaxBigint = reader.GetInt64(3) }; } } diff --git a/examples/MySqlConnectorLegacyExample/request.json b/examples/MySqlConnectorLegacyExample/request.json index 1ab327d2..b6a14bd5 100644 --- a/examples/MySqlConnectorLegacyExample/request.json +++ b/examples/MySqlConnectorLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/MySqlConnectorLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JMZWdhY3lFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF90aW1lc3RhbXAiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfYmlnaW50IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImxvbmcifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXRzdGFuZGFyZDIuMCIsInVzZURhcHBlciI6ZmFsc2V9", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JMZWdhY3lFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0TXlzcWxGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJEYXRlVGltZSJ9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF9iaWdpbnQiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjp0cnVlLCJ0eXBlIjoibG9uZyJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/NpgsqlDapperExample/QuerySql.cs b/examples/NpgsqlDapperExample/QuerySql.cs index 774ce22a..533c94aa 100644 --- a/examples/NpgsqlDapperExample/QuerySql.cs +++ b/examples/NpgsqlDapperExample/QuerySql.cs @@ -531,7 +531,7 @@ public class GetPostgresFunctionsRow { public int? MaxInteger { get; init; } public string? MaxVarchar { get; init; } - public DateTime? MaxTimestamp { get; init; } + public required DateTime MaxTimestamp { get; init; } }; public async Task GetPostgresFunctions() { diff --git a/examples/NpgsqlDapperExample/request.json b/examples/NpgsqlDapperExample/request.json index 6cfa9a81..8216d4ac 100644 --- a/examples/NpgsqlDapperExample/request.json +++ b/examples/NpgsqlDapperExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/NpgsqlDapperExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50In19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6dHJ1ZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRQb3N0Z3Jlc0Z1bmN0aW9uczptYXhfdGltZXN0YW1wIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6dHJ1ZSwidHlwZSI6IkRhdGVUaW1lIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/NpgsqlDapperLegacyExample/QuerySql.cs b/examples/NpgsqlDapperLegacyExample/QuerySql.cs index e99a7433..3148bda0 100644 --- a/examples/NpgsqlDapperLegacyExample/QuerySql.cs +++ b/examples/NpgsqlDapperLegacyExample/QuerySql.cs @@ -532,7 +532,7 @@ public class GetPostgresFunctionsRow { public int? MaxInteger { get; set; } public string MaxVarchar { get; set; } - public DateTime? MaxTimestamp { get; set; } + public DateTime MaxTimestamp { get; set; } }; public async Task GetPostgresFunctions() { diff --git a/examples/NpgsqlDapperLegacyExample/request.json b/examples/NpgsqlDapperLegacyExample/request.json index 95104744..96e61997 100644 --- a/examples/NpgsqlDapperLegacyExample/request.json +++ b/examples/NpgsqlDapperLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/NpgsqlDapperLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50In19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRQb3N0Z3Jlc0Z1bmN0aW9uczptYXhfdGltZXN0YW1wIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6dHJ1ZSwidHlwZSI6IkRhdGVUaW1lIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJ1c2VEYXBwZXIiOnRydWV9", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/NpgsqlExample/QuerySql.cs b/examples/NpgsqlExample/QuerySql.cs index c7fde1fb..23b7edc0 100644 --- a/examples/NpgsqlExample/QuerySql.cs +++ b/examples/NpgsqlExample/QuerySql.cs @@ -506,7 +506,7 @@ public async Task InsertPostgresTypesBatch(List ar } private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; - public readonly record struct GetPostgresFunctionsRow(int? MaxInteger, string? MaxVarchar, DateTime? MaxTimestamp); + public readonly record struct GetPostgresFunctionsRow(int? MaxInteger, string? MaxVarchar, DateTime MaxTimestamp); public async Task GetPostgresFunctions() { using (var connection = NpgsqlDataSource.Create(ConnectionString)) @@ -521,7 +521,7 @@ public async Task InsertPostgresTypesBatch(List ar { MaxInteger = reader.IsDBNull(0) ? null : reader.GetInt32(0), MaxVarchar = reader.IsDBNull(1) ? null : reader.GetString(1), - MaxTimestamp = reader.IsDBNull(2) ? null : reader.GetDateTime(2) + MaxTimestamp = reader.GetDateTime(2) }; } } diff --git a/examples/NpgsqlExample/request.json b/examples/NpgsqlExample/request.json index dbd7afdf..1a204d62 100644 --- a/examples/NpgsqlExample/request.json +++ b/examples/NpgsqlExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/NpgsqlExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50In19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6ZmFsc2V9", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRQb3N0Z3Jlc0Z1bmN0aW9uczptYXhfdGltZXN0YW1wIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6dHJ1ZSwidHlwZSI6IkRhdGVUaW1lIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/NpgsqlLegacyExample/QuerySql.cs b/examples/NpgsqlLegacyExample/QuerySql.cs index e49d135e..fe59f287 100644 --- a/examples/NpgsqlLegacyExample/QuerySql.cs +++ b/examples/NpgsqlLegacyExample/QuerySql.cs @@ -692,7 +692,7 @@ public class GetPostgresFunctionsRow { public int? MaxInteger { get; set; } public string MaxVarchar { get; set; } - public DateTime? MaxTimestamp { get; set; } + public DateTime MaxTimestamp { get; set; } }; public async Task GetPostgresFunctions() { @@ -708,7 +708,7 @@ public async Task GetPostgresFunctions() { MaxInteger = reader.IsDBNull(0) ? (int? )null : reader.GetInt32(0), MaxVarchar = reader.IsDBNull(1) ? null : reader.GetString(1), - MaxTimestamp = reader.IsDBNull(2) ? (DateTime? )null : reader.GetDateTime(2) + MaxTimestamp = reader.GetDateTime(2) }; } } diff --git a/examples/NpgsqlLegacyExample/request.json b/examples/NpgsqlLegacyExample/request.json index 2076a29c..f6046661 100644 --- a/examples/NpgsqlLegacyExample/request.json +++ b/examples/NpgsqlLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/NpgsqlLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50In19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRQb3N0Z3Jlc0Z1bmN0aW9uczptYXhfdGltZXN0YW1wIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6dHJ1ZSwidHlwZSI6IkRhdGVUaW1lIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/SqliteDapperExample/QuerySql.cs b/examples/SqliteDapperExample/QuerySql.cs index a11b1368..246cae96 100644 --- a/examples/SqliteDapperExample/QuerySql.cs +++ b/examples/SqliteDapperExample/QuerySql.cs @@ -432,7 +432,7 @@ public class GetSqliteTypesCntRow public class GetSqliteFunctionsRow { public int? MaxInteger { get; init; } - public decimal? MaxReal { get; init; } + public required decimal MaxReal { get; init; } public object? MaxText { get; init; } }; public async Task GetSqliteFunctions() diff --git a/examples/SqliteDapperExample/request.json b/examples/SqliteDapperExample/request.json index 6bcb804a..6d3dec9c 100644 --- a/examples/SqliteDapperExample/request.json +++ b/examples/SqliteDapperExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteDapperExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6dHJ1ZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJkZWNpbWFsIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/SqliteDapperLegacyExample/QuerySql.cs b/examples/SqliteDapperLegacyExample/QuerySql.cs index 1bfa5ac0..2e05def2 100644 --- a/examples/SqliteDapperLegacyExample/QuerySql.cs +++ b/examples/SqliteDapperLegacyExample/QuerySql.cs @@ -433,7 +433,7 @@ public async Task GetSqliteTypesCnt() public class GetSqliteFunctionsRow { public int? MaxInteger { get; set; } - public decimal? MaxReal { get; set; } + public decimal MaxReal { get; set; } public object MaxText { get; set; } }; public async Task GetSqliteFunctions() diff --git a/examples/SqliteDapperLegacyExample/request.json b/examples/SqliteDapperLegacyExample/request.json index 6b57e8f1..2516c43d 100644 --- a/examples/SqliteDapperLegacyExample/request.json +++ b/examples/SqliteDapperLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteDapperLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJkZWNpbWFsIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJ1c2VEYXBwZXIiOnRydWV9", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/SqliteExample/QuerySql.cs b/examples/SqliteExample/QuerySql.cs index 527af805..dc463e80 100644 --- a/examples/SqliteExample/QuerySql.cs +++ b/examples/SqliteExample/QuerySql.cs @@ -449,7 +449,7 @@ public async Task InsertSqliteTypesBatch(List args) } private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text FROM types_sqlite "; - public readonly record struct GetSqliteFunctionsRow(int? MaxInteger, decimal? MaxReal, object? MaxText); + public readonly record struct GetSqliteFunctionsRow(int? MaxInteger, decimal MaxReal, object? MaxText); public async Task GetSqliteFunctions() { using (var connection = new SqliteConnection(ConnectionString)) @@ -464,7 +464,7 @@ public async Task InsertSqliteTypesBatch(List args) return new GetSqliteFunctionsRow { MaxInteger = reader.IsDBNull(0) ? null : reader.GetInt32(0), - MaxReal = reader.IsDBNull(1) ? null : reader.GetDecimal(1), + MaxReal = reader.GetDecimal(1), MaxText = reader.IsDBNull(2) ? null : reader.GetValue(2) }; } diff --git a/examples/SqliteExample/request.json b/examples/SqliteExample/request.json index a3c4fc5f..fe748a47 100644 --- a/examples/SqliteExample/request.json +++ b/examples/SqliteExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6ZmFsc2V9", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJkZWNpbWFsIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", "process": { "cmd": "./dist/LocalRunner" } diff --git a/examples/SqliteLegacyExample/QuerySql.cs b/examples/SqliteLegacyExample/QuerySql.cs index 33cb7cc5..a831151f 100644 --- a/examples/SqliteLegacyExample/QuerySql.cs +++ b/examples/SqliteLegacyExample/QuerySql.cs @@ -565,7 +565,7 @@ public async Task GetSqliteTypesCnt() public class GetSqliteFunctionsRow { public int? MaxInteger { get; set; } - public decimal? MaxReal { get; set; } + public decimal MaxReal { get; set; } public object MaxText { get; set; } }; public async Task GetSqliteFunctions() @@ -582,7 +582,7 @@ public async Task GetSqliteFunctions() return new GetSqliteFunctionsRow { MaxInteger = reader.IsDBNull(0) ? (int? )null : reader.GetInt32(0), - MaxReal = reader.IsDBNull(1) ? (decimal? )null : reader.GetDecimal(1), + MaxReal = reader.GetDecimal(1), MaxText = reader.IsDBNull(2) ? null : reader.GetValue(2) }; } diff --git a/examples/SqliteLegacyExample/request.json b/examples/SqliteLegacyExample/request.json index 9c7f30b2..1de169ce 100644 --- a/examples/SqliteLegacyExample/request.json +++ b/examples/SqliteLegacyExample/request.json @@ -11,7 +11,7 @@ "codegen": { "out": "examples/SqliteLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldHN0YW5kYXJkMi4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJkZWNpbWFsIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", "process": { "cmd": "./dist/LocalRunner" } diff --git a/sqlc.ci.yaml b/sqlc.ci.yaml index efb63752..9d103df6 100644 --- a/sqlc.ci.yaml +++ b/sqlc.ci.yaml @@ -3,7 +3,7 @@ plugins: - name: csharp wasm: url: file://dist/plugin.wasm - sha256: f2829a9ca1ca403db4349dc2d069c7f4804089c4cd96ca1503cac0cfbb37b32c + sha256: 42462b0027be6691cc18f200bd632c8a8e482bdcc300f42a3fca062a0526f9e6 sql: # PostgresSQL - schema: "examples/config/postgresql/schema.sql" @@ -21,12 +21,15 @@ sql: - column: "GetPostgresFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetPostgresFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetPostgresFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" engine: "postgresql" @@ -42,12 +45,15 @@ sql: - column: "GetPostgresFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetPostgresFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetPostgresFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" engine: "postgresql" @@ -63,12 +69,15 @@ sql: - column: "GetPostgresFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetPostgresFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetPostgresFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" engine: "postgresql" @@ -84,12 +93,15 @@ sql: - column: "GetPostgresFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetPostgresFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetPostgresFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true # MySQL - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" @@ -106,15 +118,19 @@ sql: - column: "GetMysqlFunctions:max_int" csharp_type: type: "int" + notNull: false - column: "GetMysqlFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetMysqlFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - column: "GetMysqlFunctions:max_bigint" csharp_type: type: "long" + notNull: true - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" engine: "mysql" @@ -130,15 +146,19 @@ sql: - column: "GetMysqlFunctions:max_int" csharp_type: type: "int" + notNull: false - column: "GetMysqlFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetMysqlFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - column: "GetMysqlFunctions:max_bigint" csharp_type: type: "long" + notNull: true - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" engine: "mysql" @@ -154,15 +174,19 @@ sql: - column: "GetMysqlFunctions:max_int" csharp_type: type: "int" + notNull: false - column: "GetMysqlFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetMysqlFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - column: "GetMysqlFunctions:max_bigint" csharp_type: type: "long" + notNull: true - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" engine: "mysql" @@ -178,15 +202,19 @@ sql: - column: "GetMysqlFunctions:max_int" csharp_type: type: "int" + notNull: false - column: "GetMysqlFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetMysqlFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - column: "GetMysqlFunctions:max_bigint" csharp_type: type: "long" + notNull: true # Sqlite - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" @@ -203,12 +231,15 @@ sql: - column: "GetSqliteFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetSqliteFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetSqliteFunctions:max_real" csharp_type: type: "decimal" + notNull: true - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" engine: "sqlite" @@ -224,12 +255,15 @@ sql: - column: "GetSqliteFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetSqliteFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetSqliteFunctions:max_real" csharp_type: type: "decimal" + notNull: true - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" engine: "sqlite" @@ -245,12 +279,15 @@ sql: - column: "GetSqliteFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetSqliteFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetSqliteFunctions:max_real" csharp_type: type: "decimal" + notNull: true - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" engine: "sqlite" @@ -266,9 +303,12 @@ sql: - column: "GetSqliteFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetSqliteFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetSqliteFunctions:max_real" csharp_type: type: "decimal" + notNull: true diff --git a/sqlc.local.yaml b/sqlc.local.yaml index b93eb2dd..ceb6de5c 100644 --- a/sqlc.local.yaml +++ b/sqlc.local.yaml @@ -20,12 +20,15 @@ sql: - column: "GetPostgresFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetPostgresFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetPostgresFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true debugRequest: true - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" @@ -42,12 +45,15 @@ sql: - column: "GetPostgresFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetPostgresFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetPostgresFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true debugRequest: true - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" @@ -64,12 +70,15 @@ sql: - column: "GetPostgresFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetPostgresFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetPostgresFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true debugRequest: true - schema: "examples/config/postgresql/schema.sql" queries: "examples/config/postgresql/query.sql" @@ -86,12 +95,15 @@ sql: - column: "GetPostgresFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetPostgresFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetPostgresFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true debugRequest: true # MySQL - schema: "examples/config/mysql/schema.sql" @@ -109,15 +121,19 @@ sql: - column: "GetMysqlFunctions:max_int" csharp_type: type: "int" + notNull: false - column: "GetMysqlFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetMysqlFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - column: "GetMysqlFunctions:max_bigint" csharp_type: type: "long" + notNull: true debugRequest: true - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" @@ -134,15 +150,19 @@ sql: - column: "GetMysqlFunctions:max_int" csharp_type: type: "int" + notNull: false - column: "GetMysqlFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetMysqlFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - column: "GetMysqlFunctions:max_bigint" csharp_type: type: "long" + notNull: true debugRequest: true - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" @@ -159,15 +179,19 @@ sql: - column: "GetMysqlFunctions:max_int" csharp_type: type: "int" + notNull: false - column: "GetMysqlFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetMysqlFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - column: "GetMysqlFunctions:max_bigint" csharp_type: type: "long" + notNull: true debugRequest: true - schema: "examples/config/mysql/schema.sql" queries: "examples/config/mysql/query.sql" @@ -184,15 +208,19 @@ sql: - column: "GetMysqlFunctions:max_int" csharp_type: type: "int" + notNull: false - column: "GetMysqlFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetMysqlFunctions:max_timestamp" csharp_type: type: "DateTime" + notNull: true - column: "GetMysqlFunctions:max_bigint" csharp_type: type: "long" + notNull: true debugRequest: true # Sqlite - schema: "examples/config/sqlite/schema.sql" @@ -210,12 +238,15 @@ sql: - column: "GetSqliteFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetSqliteFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetSqliteFunctions:max_real" csharp_type: type: "decimal" + notNull: true debugRequest: true - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" @@ -232,12 +263,15 @@ sql: - column: "GetSqliteFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetSqliteFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetSqliteFunctions:max_real" csharp_type: type: "decimal" + notNull: true debugRequest: true - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" @@ -254,12 +288,15 @@ sql: - column: "GetSqliteFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetSqliteFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetSqliteFunctions:max_real" csharp_type: type: "decimal" + notNull: true debugRequest: true - schema: "examples/config/sqlite/schema.sql" queries: "examples/config/sqlite/query.sql" @@ -276,10 +313,13 @@ sql: - column: "GetSqliteFunctions:max_integer" csharp_type: type: "int" + notNull: false - column: "GetSqliteFunctions:max_varchar" csharp_type: type: "string" + notNull: false - column: "GetSqliteFunctions:max_real" csharp_type: type: "decimal" + notNull: true debugRequest: true From ed0d9fa270a2ccfa338f83240a8bc57c707bf211 Mon Sep 17 00:00:00 2001 From: Ilan Uzan Date: Wed, 2 Jul 2025 19:18:42 +0200 Subject: [PATCH 06/11] fix: sqlc config files --- .github/workflows/build.yml | 2 +- Makefile | 27 ++- scripts/sync_sqlc_options.sh | 18 +- sqlc.ci.yaml | 2 +- sqlc.local.yaml | 12 -- sqlc.requests.yaml | 325 +++++++++++++++++++++++++++++++++++ 6 files changed, 351 insertions(+), 35 deletions(-) create mode 100644 sqlc.requests.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dc0d5d55..dd31b3c9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -126,4 +126,4 @@ jobs: - name: Verify pushed codegen requests are synced run: | dotnet publish LocalRunner -c release --output dist/ - sqlc -f sqlc.local.yaml diff \ No newline at end of file + sqlc -f sqlc.requests.yaml diff \ No newline at end of file diff --git a/Makefile b/Makefile index d74ace0a..a64a276a 100644 --- a/Makefile +++ b/Makefile @@ -18,29 +18,26 @@ unit-tests: generate-end2end-tests: ./end2end/scripts/generate_tests.sh -run-end2end-tests: generate-end2end-tests +run-end2end-tests: ./end2end/scripts/run_tests.sh # process type plugin -dotnet-build-process: protobuf-generate dotnet-format - dotnet build LocalRunner -c Release - -dotnet-publish-process: dotnet-build-process +dotnet-publish-process: dotnet publish LocalRunner -c release --output dist/ -sqlc-generate-process: dotnet-publish-process +sync-sqlc-options: ./scripts/sync_sqlc_options.sh - sqlc -f sqlc.local.yaml generate + +sqlc-generate-requests: + SQLCCACHE=./; sqlc -f sqlc.requests.yaml generate + +sqlc-generate: + SQLCCACHE=./; sqlc -f sqlc.local.yaml generate + +test-plugin: protobuf-generate sync-sqlc-options dotnet-publish-process sqlc-generate-requests unit-tests sqlc-generate generate-end2end-tests dotnet-build run-end2end-tests update-wasm-plugin # WASM type plugin -dotnet-publish-wasm: protobuf-generate +setup-ci-wasm-plugin: dotnet publish WasmRunner -c release --output dist/ ./scripts/wasm/copy_plugin_to.sh dist - -update-wasm-plugin: ./scripts/wasm/update_sha.sh sqlc.ci.yaml - -sqlc-generate-wasm: dotnet-publish-wasm update-wasm-plugin - SQLCCACHE=./; sqlc -f sqlc.ci.yaml generate - -test-wasm-plugin: sqlc-generate-process unit-tests sqlc-generate-wasm update-wasm-plugin dotnet-build run-end2end-tests \ No newline at end of file diff --git a/scripts/sync_sqlc_options.sh b/scripts/sync_sqlc_options.sh index a047500b..0c40e388 100755 --- a/scripts/sync_sqlc_options.sh +++ b/scripts/sync_sqlc_options.sh @@ -3,19 +3,25 @@ set -e CI_YAML="sqlc.ci.yaml" +REQUESTS_YAML="sqlc.requests.yaml" LOCAL_YAML="sqlc.local.yaml" -TMP_YAML="${LOCAL_YAML}.tmp" +TMP_REQUESTS_YML="${REQUESTS_YAML}.tmp" +TMP_LOCAL_YML="${LOCAL_YAML}.tmp" -cp "$LOCAL_YAML" "$TMP_YAML" +cp "$REQUESTS_YAML" "$TMP_REQUESTS_YML" +cp "$LOCAL_YAML" "$TMP_LOCAL_YML" sql_count=$(yq '.sql | length' "$CI_YAML") for ((i=0; i Date: Wed, 2 Jul 2025 20:32:48 +0200 Subject: [PATCH 07/11] fix: sqlc-fluff pre-commit --- .pre-commit-config.yaml | 6 + .sqlfluff | 14 ++ .../test-requests/DefaultSchemaEnum/query.sql | 2 +- .../DefaultSchemaEnum/schema.sql | 4 +- .../test-requests/SchemaScopedEnum/schema.sql | 4 +- README.md | 227 +++++++++--------- examples/NpgsqlDapperExample/QuerySql.cs | 32 +-- examples/NpgsqlDapperExample/request.json | 50 ++-- .../NpgsqlDapperLegacyExample/QuerySql.cs | 32 +-- .../NpgsqlDapperLegacyExample/request.json | 50 ++-- examples/NpgsqlExample/QuerySql.cs | 70 +++--- examples/NpgsqlExample/request.json | 50 ++-- examples/NpgsqlLegacyExample/QuerySql.cs | 70 +++--- examples/NpgsqlLegacyExample/request.json | 50 ++-- examples/SqliteDapperExample/QuerySql.cs | 26 +- examples/SqliteDapperExample/request.json | 42 ++-- .../SqliteDapperLegacyExample/QuerySql.cs | 26 +- .../SqliteDapperLegacyExample/request.json | 42 ++-- examples/SqliteExample/QuerySql.cs | 36 +-- examples/SqliteExample/request.json | 42 ++-- examples/SqliteLegacyExample/QuerySql.cs | 36 +-- examples/SqliteLegacyExample/request.json | 42 ++-- examples/config/postgresql/query.sql | 169 ++++++++++--- examples/config/postgresql/schema.sql | 74 +++--- examples/config/sqlite/query.sql | 54 +++-- examples/config/sqlite/schema.sql | 22 +- 26 files changed, 708 insertions(+), 564 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 .sqlfluff diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..0c4ca5ac --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,6 @@ +repos: +- repo: https://github.com/sqlfluff/sqlfluff + rev: 3.4.1 + hooks: + - id: sqlfluff-fix + args: [--FIX-EVEN-UNPARSABLE] \ No newline at end of file diff --git a/.sqlfluff b/.sqlfluff new file mode 100644 index 00000000..3937becf --- /dev/null +++ b/.sqlfluff @@ -0,0 +1,14 @@ +[sqlfluff] +exclude_rules = LT14,LT01,LT02,LT05,LT09,AM04,AL03,RF02,RF04,AM05,AL01,ST06,CV04,CP01,CP03 +dialect = ansi + +[sqlfluff:rules] + +[sqlfluff:paths:examples/config/postgresql/] +dialect = postgres + +[sqlfluff:paths:examples/config/mysql/] +dialect = mysql + +[sqlfluff:paths:examples/config/sqlite/] +dialect = sqlite diff --git a/CodegenTests/test-requests/DefaultSchemaEnum/query.sql b/CodegenTests/test-requests/DefaultSchemaEnum/query.sql index 214153a8..d57f9fac 100644 --- a/CodegenTests/test-requests/DefaultSchemaEnum/query.sql +++ b/CodegenTests/test-requests/DefaultSchemaEnum/query.sql @@ -2,4 +2,4 @@ SELECT * FROM dummy_table LIMIT 1; -- name: TestInsert :exec -INSERT INTO dummy_table (dummy_column) VALUES (?); \ No newline at end of file +INSERT INTO dummy_table (dummy_column) VALUES (?); diff --git a/CodegenTests/test-requests/DefaultSchemaEnum/schema.sql b/CodegenTests/test-requests/DefaultSchemaEnum/schema.sql index d9582408..fb53a06c 100644 --- a/CodegenTests/test-requests/DefaultSchemaEnum/schema.sql +++ b/CodegenTests/test-requests/DefaultSchemaEnum/schema.sql @@ -1,4 +1,4 @@ CREATE TABLE dummy_table ( - dummy_column ENUM ('x', 'y') -); \ No newline at end of file + dummy_column ENUM('x', 'y') +); diff --git a/CodegenTests/test-requests/SchemaScopedEnum/schema.sql b/CodegenTests/test-requests/SchemaScopedEnum/schema.sql index fe188c4b..288ddd25 100644 --- a/CodegenTests/test-requests/SchemaScopedEnum/schema.sql +++ b/CodegenTests/test-requests/SchemaScopedEnum/schema.sql @@ -2,5 +2,5 @@ CREATE SCHEMA dummy_schema; CREATE TABLE dummy_schema.dummy_table ( - dummy_column ENUM ('x', 'y') -); \ No newline at end of file + dummy_column ENUM('x', 'y') +); diff --git a/README.md b/README.md index 0560e7da..063168ae 100644 --- a/README.md +++ b/README.md @@ -287,6 +287,15 @@ Follow the instructions in each of these: - Buf build - [Buf Build](https://buf.build/docs/installation)
- WASM (follow this guide) - [WASM libs](https://www.strathweb.com/2023/09/dotnet-wasi-applications-in-net-8-0/) +## Pre-commit Setup + +This repository uses [pre-commit](https://pre-commit.com/). To set up pre-commit hooks, run: + +```sh +pip install pre-commit +pre-commit install +``` + ### Protobuf SQLC protobuf are defined in sqlc-dev/sqlc repository. Generating C# code from protocol buffer files: @@ -319,172 +328,172 @@ By default, the release script will bump the patch version. Adding `[release]` t ### Release structure The new created tag will create a draft release with it, in the release there will be the wasm plugin embedded in the release.
-# Examples -
-Npgsql - -## Engine `postgresql`: [NpgsqlExample](examples/NpgsqlExample) -### [Schema](examples/config/postgresql/schema.sql) | [Queries](examples/config/postgresql/query.sql) | [End2End Test](end2end/EndToEndTests/NpgsqlTester.cs) -### Config -```yaml +# Examples +
+Npgsql + +## Engine `postgresql`: [NpgsqlExample](examples/NpgsqlExample) +### [Schema](examples/config/postgresql/schema.sql) | [Queries](examples/config/postgresql/query.sql) | [End2End Test](end2end/EndToEndTests/NpgsqlTester.cs) +### Config +```yaml useDapper: false targetFramework: net8.0 generateCsproj: true namespaceName: NpgsqlExampleGen -``` - +``` +
-
-NpgsqlDapper - -## Engine `postgresql`: [NpgsqlDapperExample](examples/NpgsqlDapperExample) -### [Schema](examples/config/postgresql/schema.sql) | [Queries](examples/config/postgresql/query.sql) | [End2End Test](end2end/EndToEndTests/NpgsqlDapperTester.cs) -### Config -```yaml +
+NpgsqlDapper + +## Engine `postgresql`: [NpgsqlDapperExample](examples/NpgsqlDapperExample) +### [Schema](examples/config/postgresql/schema.sql) | [Queries](examples/config/postgresql/query.sql) | [End2End Test](end2end/EndToEndTests/NpgsqlDapperTester.cs) +### Config +```yaml useDapper: true targetFramework: net8.0 generateCsproj: true namespaceName: NpgsqlDapperExampleGen -``` - +``` +
-
-NpgsqlLegacy - -## Engine `postgresql`: [NpgsqlLegacyExample](examples/NpgsqlLegacyExample) -### [Schema](examples/config/postgresql/schema.sql) | [Queries](examples/config/postgresql/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/NpgsqlTester.cs) -### Config -```yaml +
+NpgsqlLegacy + +## Engine `postgresql`: [NpgsqlLegacyExample](examples/NpgsqlLegacyExample) +### [Schema](examples/config/postgresql/schema.sql) | [Queries](examples/config/postgresql/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/NpgsqlTester.cs) +### Config +```yaml useDapper: false targetFramework: netstandard2.0 generateCsproj: true namespaceName: NpgsqlLegacyExampleGen -``` - +``` +
-
-NpgsqlDapperLegacy - -## Engine `postgresql`: [NpgsqlDapperLegacyExample](examples/NpgsqlDapperLegacyExample) -### [Schema](examples/config/postgresql/schema.sql) | [Queries](examples/config/postgresql/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/NpgsqlDapperTester.cs) -### Config -```yaml +
+NpgsqlDapperLegacy + +## Engine `postgresql`: [NpgsqlDapperLegacyExample](examples/NpgsqlDapperLegacyExample) +### [Schema](examples/config/postgresql/schema.sql) | [Queries](examples/config/postgresql/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/NpgsqlDapperTester.cs) +### Config +```yaml useDapper: true targetFramework: netstandard2.0 generateCsproj: true namespaceName: NpgsqlDapperLegacyExampleGen -``` - +``` +
-
-MySqlConnector - -## Engine `mysql`: [MySqlConnectorExample](examples/MySqlConnectorExample) -### [Schema](examples/config/mysql/schema.sql) | [Queries](examples/config/mysql/query.sql) | [End2End Test](end2end/EndToEndTests/MySqlConnectorTester.cs) -### Config -```yaml +
+MySqlConnector + +## Engine `mysql`: [MySqlConnectorExample](examples/MySqlConnectorExample) +### [Schema](examples/config/mysql/schema.sql) | [Queries](examples/config/mysql/query.sql) | [End2End Test](end2end/EndToEndTests/MySqlConnectorTester.cs) +### Config +```yaml useDapper: false targetFramework: net8.0 generateCsproj: true namespaceName: MySqlConnectorExampleGen -``` - +``` +
-
-MySqlConnectorDapper - -## Engine `mysql`: [MySqlConnectorDapperExample](examples/MySqlConnectorDapperExample) -### [Schema](examples/config/mysql/schema.sql) | [Queries](examples/config/mysql/query.sql) | [End2End Test](end2end/EndToEndTests/MySqlConnectorDapperTester.cs) -### Config -```yaml +
+MySqlConnectorDapper + +## Engine `mysql`: [MySqlConnectorDapperExample](examples/MySqlConnectorDapperExample) +### [Schema](examples/config/mysql/schema.sql) | [Queries](examples/config/mysql/query.sql) | [End2End Test](end2end/EndToEndTests/MySqlConnectorDapperTester.cs) +### Config +```yaml useDapper: true targetFramework: net8.0 generateCsproj: true namespaceName: MySqlConnectorDapperExampleGen -``` - +``` +
-
-MySqlConnectorLegacy - -## Engine `mysql`: [MySqlConnectorLegacyExample](examples/MySqlConnectorLegacyExample) -### [Schema](examples/config/mysql/schema.sql) | [Queries](examples/config/mysql/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/MySqlConnectorTester.cs) -### Config -```yaml +
+MySqlConnectorLegacy + +## Engine `mysql`: [MySqlConnectorLegacyExample](examples/MySqlConnectorLegacyExample) +### [Schema](examples/config/mysql/schema.sql) | [Queries](examples/config/mysql/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/MySqlConnectorTester.cs) +### Config +```yaml useDapper: false targetFramework: netstandard2.0 generateCsproj: true namespaceName: MySqlConnectorLegacyExampleGen -``` - +``` +
-
-MySqlConnectorDapperLegacy - -## Engine `mysql`: [MySqlConnectorDapperLegacyExample](examples/MySqlConnectorDapperLegacyExample) -### [Schema](examples/config/mysql/schema.sql) | [Queries](examples/config/mysql/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.cs) -### Config -```yaml +
+MySqlConnectorDapperLegacy + +## Engine `mysql`: [MySqlConnectorDapperLegacyExample](examples/MySqlConnectorDapperLegacyExample) +### [Schema](examples/config/mysql/schema.sql) | [Queries](examples/config/mysql/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/MySqlConnectorDapperTester.cs) +### Config +```yaml useDapper: true targetFramework: netstandard2.0 generateCsproj: true namespaceName: MySqlConnectorDapperLegacyExampleGen -``` - +``` +
-
-Sqlite - -## Engine `sqlite`: [SqliteExample](examples/SqliteExample) -### [Schema](examples/config/sqlite/schema.sql) | [Queries](examples/config/sqlite/query.sql) | [End2End Test](end2end/EndToEndTests/SqliteTester.cs) -### Config -```yaml +
+Sqlite + +## Engine `sqlite`: [SqliteExample](examples/SqliteExample) +### [Schema](examples/config/sqlite/schema.sql) | [Queries](examples/config/sqlite/query.sql) | [End2End Test](end2end/EndToEndTests/SqliteTester.cs) +### Config +```yaml useDapper: false targetFramework: net8.0 generateCsproj: true namespaceName: SqliteExampleGen -``` - +``` +
-
-SqliteDapper - -## Engine `sqlite`: [SqliteDapperExample](examples/SqliteDapperExample) -### [Schema](examples/config/sqlite/schema.sql) | [Queries](examples/config/sqlite/query.sql) | [End2End Test](end2end/EndToEndTests/SqliteDapperTester.cs) -### Config -```yaml +
+SqliteDapper + +## Engine `sqlite`: [SqliteDapperExample](examples/SqliteDapperExample) +### [Schema](examples/config/sqlite/schema.sql) | [Queries](examples/config/sqlite/query.sql) | [End2End Test](end2end/EndToEndTests/SqliteDapperTester.cs) +### Config +```yaml useDapper: true targetFramework: net8.0 generateCsproj: true namespaceName: SqliteDapperExampleGen -``` - +``` +
-
-SqliteLegacy - -## Engine `sqlite`: [SqliteLegacyExample](examples/SqliteLegacyExample) -### [Schema](examples/config/sqlite/schema.sql) | [Queries](examples/config/sqlite/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/SqliteTester.cs) -### Config -```yaml +
+SqliteLegacy + +## Engine `sqlite`: [SqliteLegacyExample](examples/SqliteLegacyExample) +### [Schema](examples/config/sqlite/schema.sql) | [Queries](examples/config/sqlite/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/SqliteTester.cs) +### Config +```yaml useDapper: false targetFramework: netstandard2.0 generateCsproj: true namespaceName: SqliteLegacyExampleGen -``` - +``` +
-
-SqliteDapperLegacy - -## Engine `sqlite`: [SqliteDapperLegacyExample](examples/SqliteDapperLegacyExample) -### [Schema](examples/config/sqlite/schema.sql) | [Queries](examples/config/sqlite/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/SqliteDapperTester.cs) -### Config -```yaml +
+SqliteDapperLegacy + +## Engine `sqlite`: [SqliteDapperLegacyExample](examples/SqliteDapperLegacyExample) +### [Schema](examples/config/sqlite/schema.sql) | [Queries](examples/config/sqlite/query.sql) | [End2End Test](end2end/EndToEndTestsLegacy/SqliteDapperTester.cs) +### Config +```yaml useDapper: true targetFramework: netstandard2.0 generateCsproj: true namespaceName: SqliteDapperLegacyExampleGen -``` - +``` +
\ No newline at end of file diff --git a/examples/NpgsqlDapperExample/QuerySql.cs b/examples/NpgsqlDapperExample/QuerySql.cs index 533c94aa..a871c1d8 100644 --- a/examples/NpgsqlDapperExample/QuerySql.cs +++ b/examples/NpgsqlDapperExample/QuerySql.cs @@ -24,7 +24,7 @@ public QuerySql(string connectionString) private string ConnectionString { get; } - private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1"; + private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1 "; public class GetAuthorRow { public required long Id { get; init; } @@ -46,7 +46,7 @@ public class GetAuthorArgs } } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name "; public class ListAuthorsRow { public required long Id { get; init; } @@ -109,7 +109,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) } } - private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1"; + private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1 "; public class GetAuthorByIdRow { public required long Id { get; init; } @@ -131,7 +131,7 @@ public class GetAuthorByIdArgs } } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%')"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) "; public class GetAuthorByNamePatternRow { public required long Id { get; init; } @@ -153,7 +153,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name "; public class DeleteAuthorArgs { public required string Name { get; init; } @@ -177,7 +177,7 @@ public async Task TruncateAuthors() } } - private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; + private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; public class UpdateAuthorsArgs { public string? Bio { get; init; } @@ -192,7 +192,7 @@ public async Task UpdateAuthors(UpdateAuthorsArgs args) } } - private const string GetAuthorsByIdsSql = "SELECT id, name, bio FROM authors WHERE id = ANY(@longArr_1::BIGINT[])"; + private const string GetAuthorsByIdsSql = "SELECT id, name, bio FROM authors WHERE id = ANY ( @longArr_1 :: BIGINT [ ] ) "; public class GetAuthorsByIdsRow { public required long Id { get; init; } @@ -214,7 +214,7 @@ public async Task> GetAuthorsByIds(GetAuthorsByIdsArgs } } - private const string GetAuthorsByIdsAndNamesSql = "SELECT id, name, bio FROM authors WHERE id = ANY(@longArr_1::BIGINT[]) AND name = ANY(@stringArr_2::TEXT[])"; + private const string GetAuthorsByIdsAndNamesSql = "SELECT id, name, bio FROM authors WHERE id = ANY ( @longArr_1 :: BIGINT [ ] ) AND name = ANY ( @stringArr_2 :: TEXT [ ] ) "; public class GetAuthorsByIdsAndNamesRow { public required long Id { get; init; } @@ -259,7 +259,7 @@ public async Task CreateBook(CreateBookArgs args) } } - private const string ListAllAuthorsBooksSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors.id = books.author_id ORDER BY authors.name"; + private const string ListAllAuthorsBooksSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id ORDER BY authors . name "; public class ListAllAuthorsBooksRow { public required Author? Author { get; init; } @@ -285,7 +285,7 @@ public async Task> ListAllAuthorsBooks() } } - private const string GetDuplicateAuthorsSql = "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio FROM authors authors1 JOIN authors authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; + private const string GetDuplicateAuthorsSql = "SELECT authors1 . id , authors1 . name, authors1 . bio, authors2 . id, authors2 . name, authors2 . bio FROM authors AS authors1 INNER JOIN authors AS authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; public class GetDuplicateAuthorsRow { public required Author? Author { get; init; } @@ -311,7 +311,7 @@ public async Task> GetDuplicateAuthors() } } - private const string GetAuthorsByBookNameSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id WHERE books . name = @name "; + private const string GetAuthorsByBookNameSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id WHERE books . name = @name "; public class GetAuthorsByBookNameRow { public required long Id { get; init; } @@ -344,7 +344,7 @@ public async Task> GetAuthorsByBookName(GetAuthors } } - private const string InsertPostgresTypesSql = "INSERT INTO postgres_types (c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, c_text_array, c_integer_array) VALUES ( @c_boolean, @c_bit, @c_smallint, @c_integer, @c_bigint, @c_real, @c_numeric, @c_decimal, @c_double_precision, @c_money, @c_date, @c_time, @c_timestamp, @c_timestamp_with_tz, @c_char, @c_varchar, @c_character_varying, @c_text, @c_bytea, @c_text_array, @c_integer_array ) "; + private const string InsertPostgresTypesSql = "INSERT INTO postgres_types(c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, c_text_array, c_integer_array) VALUES ( @c_boolean, @c_bit, @c_smallint, @c_integer, @c_bigint, @c_real, @c_numeric, @c_decimal, @c_double_precision, @c_money, @c_date, @c_time, @c_timestamp, @c_timestamp_with_tz, @c_char, @c_varchar, @c_character_varying, @c_text, @c_bytea, @c_text_array, @c_integer_array ) "; public class InsertPostgresTypesArgs { public bool? CBoolean { get; init; } @@ -494,10 +494,9 @@ public class GetPostgresTypesRow } } - private const string GetPostgresTypesCntSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; + private const string GetPostgresTypesCntSql = "SELECT c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, COUNT (* ) AS cnt FROM postgres_types GROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; public class GetPostgresTypesCntRow { - public required long Cnt { get; init; } public short? CSmallint { get; init; } public bool? CBoolean { get; init; } public int? CInteger { get; init; } @@ -516,6 +515,7 @@ public class GetPostgresTypesCntRow public string? CCharacterVarying { get; init; } public string? CText { get; init; } public byte[]? CBytea { get; init; } + public required long Cnt { get; init; } }; public async Task GetPostgresTypesCnt() { @@ -526,7 +526,7 @@ public class GetPostgresTypesCntRow } } - private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; + private const string GetPostgresFunctionsSql = "SELECT MAX ( c_integer ) AS max_integer , MAX (c_varchar ) AS max_varchar, MAX (c_timestamp ) AS max_timestamp FROM postgres_types "; public class GetPostgresFunctionsRow { public int? MaxInteger { get; init; } @@ -542,7 +542,7 @@ public class GetPostgresFunctionsRow } } - private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle) VALUES ( @c_point , @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; + private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types ( c_point , c_line, c_lseg, c_box, c_path, c_polygon, c_circle ) VALUES ( @c_point, @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; public class InsertPostgresGeoTypesArgs { public NpgsqlPoint? CPoint { get; init; } diff --git a/examples/NpgsqlDapperExample/request.json b/examples/NpgsqlDapperExample/request.json index 8216d4ac..3b2afcd3 100644 --- a/examples/NpgsqlDapperExample/request.json +++ b/examples/NpgsqlDapperExample/request.json @@ -32285,7 +32285,7 @@ }, "queries": [ { - "text": "SELECT id, name, bio FROM authors WHERE name = $1 LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE name = $1 LIMIT 1", "name": "GetAuthor", "cmd": ":one", "columns": [ @@ -32345,7 +32345,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -32539,7 +32539,7 @@ } }, { - "text": "SELECT id, name, bio FROM authors WHERE id = $1 LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE id = $1 LIMIT 1", "name": "GetAuthorById", "cmd": ":one", "columns": [ @@ -32599,7 +32599,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE($1, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE($1, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -32659,7 +32659,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = $1", + "text": "DELETE FROM authors\nWHERE name = $1", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ @@ -32688,7 +32688,7 @@ "filename": "query.sql" }, { - "text": "UPDATE authors \n SET bio = $1\n WHERE bio IS NOT NULL", + "text": "UPDATE authors\nSET bio = $1\nWHERE bio IS NOT NULL", "name": "UpdateAuthors", "cmd": ":execrows", "parameters": [ @@ -32711,7 +32711,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ANY($1::BIGINT[])", + "text": "SELECT id, name, bio FROM authors\nWHERE id = ANY($1::BIGINT [])", "name": "GetAuthorsByIds", "cmd": ":many", "columns": [ @@ -32769,7 +32769,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ANY($1::BIGINT[]) AND name = ANY($2::TEXT[])", + "text": "SELECT id, name, bio\nFROM authors\nWHERE id = ANY($1::BIGINT []) AND name = ANY($2::TEXT [])", "name": "GetAuthorsByIdsAndNames", "cmd": ":many", "columns": [ @@ -32896,7 +32896,7 @@ } }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors.id = books.author_id ORDER BY authors.name", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors\nINNER JOIN books ON authors.id = books.author_id\nORDER BY authors.name", "name": "ListAllAuthorsBooks", "cmd": ":many", "columns": [ @@ -32920,7 +32920,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio\nFROM authors authors1 JOIN authors authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", + "text": "SELECT\n authors1.id, authors1.name, authors1.bio,\n authors2.id, authors2.name, authors2.bio\nFROM authors AS authors1\nINNER JOIN authors AS authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", "name": "GetDuplicateAuthors", "cmd": ":many", "columns": [ @@ -32944,7 +32944,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description\nFROM authors JOIN books ON authors.id = books.author_id\nWHERE books.name = $1", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nWHERE books.name = $1", "name": "GetAuthorsByBookName", "cmd": ":many", "columns": [ @@ -33012,7 +33012,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO postgres_types \n (c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money,\n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea, c_text_array, c_integer_array)\nVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, \n $11, $12, $13, $14, $15, $16, $17, $18, $19, \n $20, $21)", + "text": "INSERT INTO postgres_types\n(\n c_boolean,\n c_bit,\n c_smallint,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea, c_text_array, c_integer_array\n)\nVALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10,\n $11, $12, $13, $14, $15, $16, $17, $18, $19,\n $20, $21\n)", "name": "InsertPostgresTypes", "cmd": ":exec", "parameters": [ @@ -33342,7 +33342,7 @@ } }, { - "text": "INSERT INTO postgres_types \n (c_boolean, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea)\nVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, \n $10, $11, $12, $13, $14, $15, $16, $17, $18)", + "text": "INSERT INTO postgres_types\n(\n c_boolean,\n c_smallint,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea\n)\nVALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9,\n $10, $11, $12, $13, $14, $15, $16, $17, $18\n)", "name": "InsertPostgresTypesBatch", "cmd": ":copyfrom", "parameters": [ @@ -33893,19 +33893,10 @@ "filename": "query.sql" }, { - "text": "SELECT COUNT(1) AS cnt , \n c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nFROM postgres_types\nGROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nLIMIT 1", + "text": "SELECT\n c_smallint,\n c_boolean,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea,\n COUNT(*) AS cnt\nFROM postgres_types\nGROUP BY\n c_smallint,\n c_boolean,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea\nLIMIT 1", "name": "GetPostgresTypesCnt", "cmd": ":one", "columns": [ - { - "name": "cnt", - "notNull": true, - "length": -1, - "isFuncCall": true, - "type": { - "name": "bigint" - } - }, { "name": "c_smallint", "length": -1, @@ -34117,12 +34108,21 @@ "name": "bytea" }, "originalName": "c_bytea" + }, + { + "name": "cnt", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "bigint" + } } ], "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", + "text": "SELECT\n MAX(c_integer) AS max_integer,\n MAX(c_varchar) AS max_varchar,\n MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", "name": "GetPostgresFunctions", "cmd": ":one", "columns": [ @@ -34157,7 +34157,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", + "text": "INSERT INTO postgres_geometric_types (\n c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle\n)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", "name": "InsertPostgresGeoTypes", "cmd": ":exec", "parameters": [ diff --git a/examples/NpgsqlDapperLegacyExample/QuerySql.cs b/examples/NpgsqlDapperLegacyExample/QuerySql.cs index 3148bda0..f4e186d7 100644 --- a/examples/NpgsqlDapperLegacyExample/QuerySql.cs +++ b/examples/NpgsqlDapperLegacyExample/QuerySql.cs @@ -25,7 +25,7 @@ public QuerySql(string connectionString) private string ConnectionString { get; } - private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1"; + private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1 "; public class GetAuthorRow { public long Id { get; set; } @@ -47,7 +47,7 @@ public async Task GetAuthor(GetAuthorArgs args) } } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name "; public class ListAuthorsRow { public long Id { get; set; } @@ -110,7 +110,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) } } - private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1"; + private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1 "; public class GetAuthorByIdRow { public long Id { get; set; } @@ -132,7 +132,7 @@ public async Task GetAuthorById(GetAuthorByIdArgs args) } } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%')"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) "; public class GetAuthorByNamePatternRow { public long Id { get; set; } @@ -154,7 +154,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name "; public class DeleteAuthorArgs { public string Name { get; set; } @@ -178,7 +178,7 @@ public async Task TruncateAuthors() } } - private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; + private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; public class UpdateAuthorsArgs { public string Bio { get; set; } @@ -193,7 +193,7 @@ public async Task UpdateAuthors(UpdateAuthorsArgs args) } } - private const string GetAuthorsByIdsSql = "SELECT id, name, bio FROM authors WHERE id = ANY(@longArr_1::BIGINT[])"; + private const string GetAuthorsByIdsSql = "SELECT id, name, bio FROM authors WHERE id = ANY ( @longArr_1 :: BIGINT [ ] ) "; public class GetAuthorsByIdsRow { public long Id { get; set; } @@ -215,7 +215,7 @@ public async Task> GetAuthorsByIds(GetAuthorsByIdsArgs } } - private const string GetAuthorsByIdsAndNamesSql = "SELECT id, name, bio FROM authors WHERE id = ANY(@longArr_1::BIGINT[]) AND name = ANY(@stringArr_2::TEXT[])"; + private const string GetAuthorsByIdsAndNamesSql = "SELECT id, name, bio FROM authors WHERE id = ANY ( @longArr_1 :: BIGINT [ ] ) AND name = ANY ( @stringArr_2 :: TEXT [ ] ) "; public class GetAuthorsByIdsAndNamesRow { public long Id { get; set; } @@ -260,7 +260,7 @@ public async Task CreateBook(CreateBookArgs args) } } - private const string ListAllAuthorsBooksSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors.id = books.author_id ORDER BY authors.name"; + private const string ListAllAuthorsBooksSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id ORDER BY authors . name "; public class ListAllAuthorsBooksRow { public Author Author { get; set; } @@ -286,7 +286,7 @@ public async Task> ListAllAuthorsBooks() } } - private const string GetDuplicateAuthorsSql = "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio FROM authors authors1 JOIN authors authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; + private const string GetDuplicateAuthorsSql = "SELECT authors1 . id , authors1 . name, authors1 . bio, authors2 . id, authors2 . name, authors2 . bio FROM authors AS authors1 INNER JOIN authors AS authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; public class GetDuplicateAuthorsRow { public Author Author { get; set; } @@ -312,7 +312,7 @@ public async Task> GetDuplicateAuthors() } } - private const string GetAuthorsByBookNameSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id WHERE books . name = @name "; + private const string GetAuthorsByBookNameSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id WHERE books . name = @name "; public class GetAuthorsByBookNameRow { public long Id { get; set; } @@ -345,7 +345,7 @@ public async Task> GetAuthorsByBookName(GetAuthors } } - private const string InsertPostgresTypesSql = "INSERT INTO postgres_types (c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, c_text_array, c_integer_array) VALUES ( @c_boolean, @c_bit, @c_smallint, @c_integer, @c_bigint, @c_real, @c_numeric, @c_decimal, @c_double_precision, @c_money, @c_date, @c_time, @c_timestamp, @c_timestamp_with_tz, @c_char, @c_varchar, @c_character_varying, @c_text, @c_bytea, @c_text_array, @c_integer_array ) "; + private const string InsertPostgresTypesSql = "INSERT INTO postgres_types(c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, c_text_array, c_integer_array) VALUES ( @c_boolean, @c_bit, @c_smallint, @c_integer, @c_bigint, @c_real, @c_numeric, @c_decimal, @c_double_precision, @c_money, @c_date, @c_time, @c_timestamp, @c_timestamp_with_tz, @c_char, @c_varchar, @c_character_varying, @c_text, @c_bytea, @c_text_array, @c_integer_array ) "; public class InsertPostgresTypesArgs { public bool? CBoolean { get; set; } @@ -495,10 +495,9 @@ public async Task GetPostgresTypes() } } - private const string GetPostgresTypesCntSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; + private const string GetPostgresTypesCntSql = "SELECT c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, COUNT (* ) AS cnt FROM postgres_types GROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; public class GetPostgresTypesCntRow { - public long Cnt { get; set; } public short? CSmallint { get; set; } public bool? CBoolean { get; set; } public int? CInteger { get; set; } @@ -517,6 +516,7 @@ public class GetPostgresTypesCntRow public string CCharacterVarying { get; set; } public string CText { get; set; } public byte[] CBytea { get; set; } + public long Cnt { get; set; } }; public async Task GetPostgresTypesCnt() { @@ -527,7 +527,7 @@ public async Task GetPostgresTypesCnt() } } - private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; + private const string GetPostgresFunctionsSql = "SELECT MAX ( c_integer ) AS max_integer , MAX (c_varchar ) AS max_varchar, MAX (c_timestamp ) AS max_timestamp FROM postgres_types "; public class GetPostgresFunctionsRow { public int? MaxInteger { get; set; } @@ -543,7 +543,7 @@ public async Task GetPostgresFunctions() } } - private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle) VALUES ( @c_point , @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; + private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types ( c_point , c_line, c_lseg, c_box, c_path, c_polygon, c_circle ) VALUES ( @c_point, @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; public class InsertPostgresGeoTypesArgs { public NpgsqlPoint? CPoint { get; set; } diff --git a/examples/NpgsqlDapperLegacyExample/request.json b/examples/NpgsqlDapperLegacyExample/request.json index 96e61997..89ae6051 100644 --- a/examples/NpgsqlDapperLegacyExample/request.json +++ b/examples/NpgsqlDapperLegacyExample/request.json @@ -32285,7 +32285,7 @@ }, "queries": [ { - "text": "SELECT id, name, bio FROM authors WHERE name = $1 LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE name = $1 LIMIT 1", "name": "GetAuthor", "cmd": ":one", "columns": [ @@ -32345,7 +32345,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -32539,7 +32539,7 @@ } }, { - "text": "SELECT id, name, bio FROM authors WHERE id = $1 LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE id = $1 LIMIT 1", "name": "GetAuthorById", "cmd": ":one", "columns": [ @@ -32599,7 +32599,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE($1, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE($1, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -32659,7 +32659,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = $1", + "text": "DELETE FROM authors\nWHERE name = $1", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ @@ -32688,7 +32688,7 @@ "filename": "query.sql" }, { - "text": "UPDATE authors \n SET bio = $1\n WHERE bio IS NOT NULL", + "text": "UPDATE authors\nSET bio = $1\nWHERE bio IS NOT NULL", "name": "UpdateAuthors", "cmd": ":execrows", "parameters": [ @@ -32711,7 +32711,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ANY($1::BIGINT[])", + "text": "SELECT id, name, bio FROM authors\nWHERE id = ANY($1::BIGINT [])", "name": "GetAuthorsByIds", "cmd": ":many", "columns": [ @@ -32769,7 +32769,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ANY($1::BIGINT[]) AND name = ANY($2::TEXT[])", + "text": "SELECT id, name, bio\nFROM authors\nWHERE id = ANY($1::BIGINT []) AND name = ANY($2::TEXT [])", "name": "GetAuthorsByIdsAndNames", "cmd": ":many", "columns": [ @@ -32896,7 +32896,7 @@ } }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors.id = books.author_id ORDER BY authors.name", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors\nINNER JOIN books ON authors.id = books.author_id\nORDER BY authors.name", "name": "ListAllAuthorsBooks", "cmd": ":many", "columns": [ @@ -32920,7 +32920,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio\nFROM authors authors1 JOIN authors authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", + "text": "SELECT\n authors1.id, authors1.name, authors1.bio,\n authors2.id, authors2.name, authors2.bio\nFROM authors AS authors1\nINNER JOIN authors AS authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", "name": "GetDuplicateAuthors", "cmd": ":many", "columns": [ @@ -32944,7 +32944,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description\nFROM authors JOIN books ON authors.id = books.author_id\nWHERE books.name = $1", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nWHERE books.name = $1", "name": "GetAuthorsByBookName", "cmd": ":many", "columns": [ @@ -33012,7 +33012,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO postgres_types \n (c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money,\n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea, c_text_array, c_integer_array)\nVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, \n $11, $12, $13, $14, $15, $16, $17, $18, $19, \n $20, $21)", + "text": "INSERT INTO postgres_types\n(\n c_boolean,\n c_bit,\n c_smallint,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea, c_text_array, c_integer_array\n)\nVALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10,\n $11, $12, $13, $14, $15, $16, $17, $18, $19,\n $20, $21\n)", "name": "InsertPostgresTypes", "cmd": ":exec", "parameters": [ @@ -33342,7 +33342,7 @@ } }, { - "text": "INSERT INTO postgres_types \n (c_boolean, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea)\nVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, \n $10, $11, $12, $13, $14, $15, $16, $17, $18)", + "text": "INSERT INTO postgres_types\n(\n c_boolean,\n c_smallint,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea\n)\nVALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9,\n $10, $11, $12, $13, $14, $15, $16, $17, $18\n)", "name": "InsertPostgresTypesBatch", "cmd": ":copyfrom", "parameters": [ @@ -33893,19 +33893,10 @@ "filename": "query.sql" }, { - "text": "SELECT COUNT(1) AS cnt , \n c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nFROM postgres_types\nGROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nLIMIT 1", + "text": "SELECT\n c_smallint,\n c_boolean,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea,\n COUNT(*) AS cnt\nFROM postgres_types\nGROUP BY\n c_smallint,\n c_boolean,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea\nLIMIT 1", "name": "GetPostgresTypesCnt", "cmd": ":one", "columns": [ - { - "name": "cnt", - "notNull": true, - "length": -1, - "isFuncCall": true, - "type": { - "name": "bigint" - } - }, { "name": "c_smallint", "length": -1, @@ -34117,12 +34108,21 @@ "name": "bytea" }, "originalName": "c_bytea" + }, + { + "name": "cnt", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "bigint" + } } ], "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", + "text": "SELECT\n MAX(c_integer) AS max_integer,\n MAX(c_varchar) AS max_varchar,\n MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", "name": "GetPostgresFunctions", "cmd": ":one", "columns": [ @@ -34157,7 +34157,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", + "text": "INSERT INTO postgres_geometric_types (\n c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle\n)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", "name": "InsertPostgresGeoTypes", "cmd": ":exec", "parameters": [ diff --git a/examples/NpgsqlExample/QuerySql.cs b/examples/NpgsqlExample/QuerySql.cs index 23b7edc0..80053c00 100644 --- a/examples/NpgsqlExample/QuerySql.cs +++ b/examples/NpgsqlExample/QuerySql.cs @@ -21,7 +21,7 @@ public QuerySql(string connectionString) private string ConnectionString { get; } - private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1"; + private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1 "; public readonly record struct GetAuthorRow(long Id, string Name, string? Bio); public readonly record struct GetAuthorArgs(string Name); public async Task GetAuthor(GetAuthorArgs args) @@ -49,7 +49,7 @@ public QuerySql(string connectionString) return null; } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name "; public readonly record struct ListAuthorsRow(long Id, string Name, string? Bio); public async Task> ListAuthors() { @@ -118,7 +118,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) } } - private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1"; + private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1 "; public readonly record struct GetAuthorByIdRow(long Id, string Name, string? Bio); public readonly record struct GetAuthorByIdArgs(long Id); public async Task GetAuthorById(GetAuthorByIdArgs args) @@ -146,7 +146,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) return null; } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%')"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) "; public readonly record struct GetAuthorByNamePatternRow(long Id, string Name, string? Bio); public readonly record struct GetAuthorByNamePatternArgs(string? NamePattern); public async Task> GetAuthorByNamePattern(GetAuthorByNamePatternArgs args) @@ -170,7 +170,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name "; public readonly record struct DeleteAuthorArgs(string Name); public async Task DeleteAuthor(DeleteAuthorArgs args) { @@ -196,7 +196,7 @@ public async Task TruncateAuthors() } } - private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; + private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; public readonly record struct UpdateAuthorsArgs(string? Bio); public async Task UpdateAuthors(UpdateAuthorsArgs args) { @@ -210,7 +210,7 @@ public async Task UpdateAuthors(UpdateAuthorsArgs args) } } - private const string GetAuthorsByIdsSql = "SELECT id, name, bio FROM authors WHERE id = ANY(@longArr_1::BIGINT[])"; + private const string GetAuthorsByIdsSql = "SELECT id, name, bio FROM authors WHERE id = ANY ( @longArr_1 :: BIGINT [ ] ) "; public readonly record struct GetAuthorsByIdsRow(long Id, string Name, string? Bio); public readonly record struct GetAuthorsByIdsArgs(long[] LongArr1); public async Task> GetAuthorsByIds(GetAuthorsByIdsArgs args) @@ -234,7 +234,7 @@ public async Task> GetAuthorsByIds(GetAuthorsByIdsArgs } } - private const string GetAuthorsByIdsAndNamesSql = "SELECT id, name, bio FROM authors WHERE id = ANY(@longArr_1::BIGINT[]) AND name = ANY(@stringArr_2::TEXT[])"; + private const string GetAuthorsByIdsAndNamesSql = "SELECT id, name, bio FROM authors WHERE id = ANY ( @longArr_1 :: BIGINT [ ] ) AND name = ANY ( @stringArr_2 :: TEXT [ ] ) "; public readonly record struct GetAuthorsByIdsAndNamesRow(long Id, string Name, string? Bio); public readonly record struct GetAuthorsByIdsAndNamesArgs(long[] LongArr1, string[] StringArr2); public async Task> GetAuthorsByIdsAndNames(GetAuthorsByIdsAndNamesArgs args) @@ -276,7 +276,7 @@ public async Task CreateBook(CreateBookArgs args) } } - private const string ListAllAuthorsBooksSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors.id = books.author_id ORDER BY authors.name"; + private const string ListAllAuthorsBooksSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id ORDER BY authors . name "; public readonly record struct ListAllAuthorsBooksRow(Author? Author, Book? Book); public async Task> ListAllAuthorsBooks() { @@ -298,7 +298,7 @@ public async Task> ListAllAuthorsBooks() } } - private const string GetDuplicateAuthorsSql = "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio FROM authors authors1 JOIN authors authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; + private const string GetDuplicateAuthorsSql = "SELECT authors1 . id , authors1 . name, authors1 . bio, authors2 . id, authors2 . name, authors2 . bio FROM authors AS authors1 INNER JOIN authors AS authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; public readonly record struct GetDuplicateAuthorsRow(Author? Author, Author? Author2); public async Task> GetDuplicateAuthors() { @@ -320,7 +320,7 @@ public async Task> GetDuplicateAuthors() } } - private const string GetAuthorsByBookNameSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id WHERE books . name = @name "; + private const string GetAuthorsByBookNameSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id WHERE books . name = @name "; public readonly record struct GetAuthorsByBookNameRow(long Id, string Name, string? Bio, Book? Book); public readonly record struct GetAuthorsByBookNameArgs(string Name); public async Task> GetAuthorsByBookName(GetAuthorsByBookNameArgs args) @@ -344,7 +344,7 @@ public async Task> GetAuthorsByBookName(GetAuthors } } - private const string InsertPostgresTypesSql = "INSERT INTO postgres_types (c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, c_text_array, c_integer_array) VALUES ( @c_boolean, @c_bit, @c_smallint, @c_integer, @c_bigint, @c_real, @c_numeric, @c_decimal, @c_double_precision, @c_money, @c_date, @c_time, @c_timestamp, @c_timestamp_with_tz, @c_char, @c_varchar, @c_character_varying, @c_text, @c_bytea, @c_text_array, @c_integer_array ) "; + private const string InsertPostgresTypesSql = "INSERT INTO postgres_types(c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, c_text_array, c_integer_array) VALUES ( @c_boolean, @c_bit, @c_smallint, @c_integer, @c_bigint, @c_real, @c_numeric, @c_decimal, @c_double_precision, @c_money, @c_date, @c_time, @c_timestamp, @c_timestamp_with_tz, @c_char, @c_varchar, @c_character_varying, @c_text, @c_bytea, @c_text_array, @c_integer_array ) "; public readonly record struct InsertPostgresTypesArgs(bool? CBoolean, byte[]? CBit, short? CSmallint, int? CInteger, long? CBigint, float? CReal, decimal? CNumeric, decimal? CDecimal, double? CDoublePrecision, decimal? CMoney, DateTime? CDate, TimeSpan? CTime, DateTime? CTimestamp, DateTime? CTimestampWithTz, string? CChar, string? CVarchar, string? CCharacterVarying, string? CText, byte[]? CBytea, string[]? CTextArray, int[]? CIntegerArray); public async Task InsertPostgresTypes(InsertPostgresTypesArgs args) { @@ -463,8 +463,8 @@ public async Task InsertPostgresTypesBatch(List ar return null; } - private const string GetPostgresTypesCntSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; - public readonly record struct GetPostgresTypesCntRow(long Cnt, short? CSmallint, bool? CBoolean, int? CInteger, long? CBigint, float? CReal, decimal? CNumeric, decimal? CDecimal, double? CDoublePrecision, decimal? CMoney, DateTime? CDate, TimeSpan? CTime, DateTime? CTimestamp, DateTime? CTimestampWithTz, string? CChar, string? CVarchar, string? CCharacterVarying, string? CText, byte[]? CBytea); + private const string GetPostgresTypesCntSql = "SELECT c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, COUNT (* ) AS cnt FROM postgres_types GROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; + public readonly record struct GetPostgresTypesCntRow(short? CSmallint, bool? CBoolean, int? CInteger, long? CBigint, float? CReal, decimal? CNumeric, decimal? CDecimal, double? CDoublePrecision, decimal? CMoney, DateTime? CDate, TimeSpan? CTime, DateTime? CTimestamp, DateTime? CTimestampWithTz, string? CChar, string? CVarchar, string? CCharacterVarying, string? CText, byte[]? CBytea, long Cnt); public async Task GetPostgresTypesCnt() { using (var connection = NpgsqlDataSource.Create(ConnectionString)) @@ -477,25 +477,25 @@ public async Task InsertPostgresTypesBatch(List ar { return new GetPostgresTypesCntRow { - Cnt = reader.GetInt64(0), - CSmallint = reader.IsDBNull(1) ? null : reader.GetInt16(1), - CBoolean = reader.IsDBNull(2) ? null : reader.GetBoolean(2), - CInteger = reader.IsDBNull(3) ? null : reader.GetInt32(3), - CBigint = reader.IsDBNull(4) ? null : reader.GetInt64(4), - CReal = reader.IsDBNull(5) ? null : reader.GetFloat(5), - CNumeric = reader.IsDBNull(6) ? null : reader.GetDecimal(6), - CDecimal = reader.IsDBNull(7) ? null : reader.GetDecimal(7), - CDoublePrecision = reader.IsDBNull(8) ? null : reader.GetDouble(8), - CMoney = reader.IsDBNull(9) ? null : reader.GetDecimal(9), - CDate = reader.IsDBNull(10) ? null : reader.GetDateTime(10), - CTime = reader.IsDBNull(11) ? null : reader.GetFieldValue(11), - CTimestamp = reader.IsDBNull(12) ? null : reader.GetDateTime(12), - CTimestampWithTz = reader.IsDBNull(13) ? null : reader.GetDateTime(13), - CChar = reader.IsDBNull(14) ? null : reader.GetString(14), - CVarchar = reader.IsDBNull(15) ? null : reader.GetString(15), - CCharacterVarying = reader.IsDBNull(16) ? null : reader.GetString(16), - CText = reader.IsDBNull(17) ? null : reader.GetString(17), - CBytea = reader.IsDBNull(18) ? null : reader.GetFieldValue(18) + CSmallint = reader.IsDBNull(0) ? null : reader.GetInt16(0), + CBoolean = reader.IsDBNull(1) ? null : reader.GetBoolean(1), + CInteger = reader.IsDBNull(2) ? null : reader.GetInt32(2), + CBigint = reader.IsDBNull(3) ? null : reader.GetInt64(3), + CReal = reader.IsDBNull(4) ? null : reader.GetFloat(4), + CNumeric = reader.IsDBNull(5) ? null : reader.GetDecimal(5), + CDecimal = reader.IsDBNull(6) ? null : reader.GetDecimal(6), + CDoublePrecision = reader.IsDBNull(7) ? null : reader.GetDouble(7), + CMoney = reader.IsDBNull(8) ? null : reader.GetDecimal(8), + CDate = reader.IsDBNull(9) ? null : reader.GetDateTime(9), + CTime = reader.IsDBNull(10) ? null : reader.GetFieldValue(10), + CTimestamp = reader.IsDBNull(11) ? null : reader.GetDateTime(11), + CTimestampWithTz = reader.IsDBNull(12) ? null : reader.GetDateTime(12), + CChar = reader.IsDBNull(13) ? null : reader.GetString(13), + CVarchar = reader.IsDBNull(14) ? null : reader.GetString(14), + CCharacterVarying = reader.IsDBNull(15) ? null : reader.GetString(15), + CText = reader.IsDBNull(16) ? null : reader.GetString(16), + CBytea = reader.IsDBNull(17) ? null : reader.GetFieldValue(17), + Cnt = reader.GetInt64(18) }; } } @@ -505,7 +505,7 @@ public async Task InsertPostgresTypesBatch(List ar return null; } - private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; + private const string GetPostgresFunctionsSql = "SELECT MAX ( c_integer ) AS max_integer , MAX (c_varchar ) AS max_varchar, MAX (c_timestamp ) AS max_timestamp FROM postgres_types "; public readonly record struct GetPostgresFunctionsRow(int? MaxInteger, string? MaxVarchar, DateTime MaxTimestamp); public async Task GetPostgresFunctions() { @@ -531,7 +531,7 @@ public async Task InsertPostgresTypesBatch(List ar return null; } - private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle) VALUES ( @c_point , @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; + private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types ( c_point , c_line, c_lseg, c_box, c_path, c_polygon, c_circle ) VALUES ( @c_point, @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; public readonly record struct InsertPostgresGeoTypesArgs(NpgsqlPoint? CPoint, NpgsqlLine? CLine, NpgsqlLSeg? CLseg, NpgsqlBox? CBox, NpgsqlPath? CPath, NpgsqlPolygon? CPolygon, NpgsqlCircle? CCircle); public async Task InsertPostgresGeoTypes(InsertPostgresGeoTypesArgs args) { diff --git a/examples/NpgsqlExample/request.json b/examples/NpgsqlExample/request.json index 1a204d62..aa8fa3b3 100644 --- a/examples/NpgsqlExample/request.json +++ b/examples/NpgsqlExample/request.json @@ -32285,7 +32285,7 @@ }, "queries": [ { - "text": "SELECT id, name, bio FROM authors WHERE name = $1 LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE name = $1 LIMIT 1", "name": "GetAuthor", "cmd": ":one", "columns": [ @@ -32345,7 +32345,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -32539,7 +32539,7 @@ } }, { - "text": "SELECT id, name, bio FROM authors WHERE id = $1 LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE id = $1 LIMIT 1", "name": "GetAuthorById", "cmd": ":one", "columns": [ @@ -32599,7 +32599,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE($1, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE($1, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -32659,7 +32659,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = $1", + "text": "DELETE FROM authors\nWHERE name = $1", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ @@ -32688,7 +32688,7 @@ "filename": "query.sql" }, { - "text": "UPDATE authors \n SET bio = $1\n WHERE bio IS NOT NULL", + "text": "UPDATE authors\nSET bio = $1\nWHERE bio IS NOT NULL", "name": "UpdateAuthors", "cmd": ":execrows", "parameters": [ @@ -32711,7 +32711,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ANY($1::BIGINT[])", + "text": "SELECT id, name, bio FROM authors\nWHERE id = ANY($1::BIGINT [])", "name": "GetAuthorsByIds", "cmd": ":many", "columns": [ @@ -32769,7 +32769,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ANY($1::BIGINT[]) AND name = ANY($2::TEXT[])", + "text": "SELECT id, name, bio\nFROM authors\nWHERE id = ANY($1::BIGINT []) AND name = ANY($2::TEXT [])", "name": "GetAuthorsByIdsAndNames", "cmd": ":many", "columns": [ @@ -32896,7 +32896,7 @@ } }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors.id = books.author_id ORDER BY authors.name", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors\nINNER JOIN books ON authors.id = books.author_id\nORDER BY authors.name", "name": "ListAllAuthorsBooks", "cmd": ":many", "columns": [ @@ -32920,7 +32920,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio\nFROM authors authors1 JOIN authors authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", + "text": "SELECT\n authors1.id, authors1.name, authors1.bio,\n authors2.id, authors2.name, authors2.bio\nFROM authors AS authors1\nINNER JOIN authors AS authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", "name": "GetDuplicateAuthors", "cmd": ":many", "columns": [ @@ -32944,7 +32944,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description\nFROM authors JOIN books ON authors.id = books.author_id\nWHERE books.name = $1", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nWHERE books.name = $1", "name": "GetAuthorsByBookName", "cmd": ":many", "columns": [ @@ -33012,7 +33012,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO postgres_types \n (c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money,\n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea, c_text_array, c_integer_array)\nVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, \n $11, $12, $13, $14, $15, $16, $17, $18, $19, \n $20, $21)", + "text": "INSERT INTO postgres_types\n(\n c_boolean,\n c_bit,\n c_smallint,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea, c_text_array, c_integer_array\n)\nVALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10,\n $11, $12, $13, $14, $15, $16, $17, $18, $19,\n $20, $21\n)", "name": "InsertPostgresTypes", "cmd": ":exec", "parameters": [ @@ -33342,7 +33342,7 @@ } }, { - "text": "INSERT INTO postgres_types \n (c_boolean, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea)\nVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, \n $10, $11, $12, $13, $14, $15, $16, $17, $18)", + "text": "INSERT INTO postgres_types\n(\n c_boolean,\n c_smallint,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea\n)\nVALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9,\n $10, $11, $12, $13, $14, $15, $16, $17, $18\n)", "name": "InsertPostgresTypesBatch", "cmd": ":copyfrom", "parameters": [ @@ -33893,19 +33893,10 @@ "filename": "query.sql" }, { - "text": "SELECT COUNT(1) AS cnt , \n c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nFROM postgres_types\nGROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nLIMIT 1", + "text": "SELECT\n c_smallint,\n c_boolean,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea,\n COUNT(*) AS cnt\nFROM postgres_types\nGROUP BY\n c_smallint,\n c_boolean,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea\nLIMIT 1", "name": "GetPostgresTypesCnt", "cmd": ":one", "columns": [ - { - "name": "cnt", - "notNull": true, - "length": -1, - "isFuncCall": true, - "type": { - "name": "bigint" - } - }, { "name": "c_smallint", "length": -1, @@ -34117,12 +34108,21 @@ "name": "bytea" }, "originalName": "c_bytea" + }, + { + "name": "cnt", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "bigint" + } } ], "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", + "text": "SELECT\n MAX(c_integer) AS max_integer,\n MAX(c_varchar) AS max_varchar,\n MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", "name": "GetPostgresFunctions", "cmd": ":one", "columns": [ @@ -34157,7 +34157,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", + "text": "INSERT INTO postgres_geometric_types (\n c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle\n)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", "name": "InsertPostgresGeoTypes", "cmd": ":exec", "parameters": [ diff --git a/examples/NpgsqlLegacyExample/QuerySql.cs b/examples/NpgsqlLegacyExample/QuerySql.cs index fe59f287..8097ad0f 100644 --- a/examples/NpgsqlLegacyExample/QuerySql.cs +++ b/examples/NpgsqlLegacyExample/QuerySql.cs @@ -22,7 +22,7 @@ public QuerySql(string connectionString) private string ConnectionString { get; } - private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1"; + private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1 "; public class GetAuthorRow { public long Id { get; set; } @@ -58,7 +58,7 @@ public async Task GetAuthor(GetAuthorArgs args) return null; } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name "; public class ListAuthorsRow { public long Id { get; set; } @@ -149,7 +149,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) } } - private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1"; + private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1 "; public class GetAuthorByIdRow { public long Id { get; set; } @@ -185,7 +185,7 @@ public async Task GetAuthorById(GetAuthorByIdArgs args) return null; } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%')"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) "; public class GetAuthorByNamePatternRow { public long Id { get; set; } @@ -217,7 +217,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name "; public class DeleteAuthorArgs { public string Name { get; set; } @@ -246,7 +246,7 @@ public async Task TruncateAuthors() } } - private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; + private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; public class UpdateAuthorsArgs { public string Bio { get; set; } @@ -263,7 +263,7 @@ public async Task UpdateAuthors(UpdateAuthorsArgs args) } } - private const string GetAuthorsByIdsSql = "SELECT id, name, bio FROM authors WHERE id = ANY(@longArr_1::BIGINT[])"; + private const string GetAuthorsByIdsSql = "SELECT id, name, bio FROM authors WHERE id = ANY ( @longArr_1 :: BIGINT [ ] ) "; public class GetAuthorsByIdsRow { public long Id { get; set; } @@ -295,7 +295,7 @@ public async Task> GetAuthorsByIds(GetAuthorsByIdsArgs } } - private const string GetAuthorsByIdsAndNamesSql = "SELECT id, name, bio FROM authors WHERE id = ANY(@longArr_1::BIGINT[]) AND name = ANY(@stringArr_2::TEXT[])"; + private const string GetAuthorsByIdsAndNamesSql = "SELECT id, name, bio FROM authors WHERE id = ANY ( @longArr_1 :: BIGINT [ ] ) AND name = ANY ( @stringArr_2 :: TEXT [ ] ) "; public class GetAuthorsByIdsAndNamesRow { public long Id { get; set; } @@ -353,7 +353,7 @@ public async Task CreateBook(CreateBookArgs args) } } - private const string ListAllAuthorsBooksSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors.id = books.author_id ORDER BY authors.name"; + private const string ListAllAuthorsBooksSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id ORDER BY authors . name "; public class ListAllAuthorsBooksRow { public Author Author { get; set; } @@ -379,7 +379,7 @@ public async Task> ListAllAuthorsBooks() } } - private const string GetDuplicateAuthorsSql = "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio FROM authors authors1 JOIN authors authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; + private const string GetDuplicateAuthorsSql = "SELECT authors1 . id , authors1 . name, authors1 . bio, authors2 . id, authors2 . name, authors2 . bio FROM authors AS authors1 INNER JOIN authors AS authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; public class GetDuplicateAuthorsRow { public Author Author { get; set; } @@ -405,7 +405,7 @@ public async Task> GetDuplicateAuthors() } } - private const string GetAuthorsByBookNameSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id WHERE books . name = @name "; + private const string GetAuthorsByBookNameSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id WHERE books . name = @name "; public class GetAuthorsByBookNameRow { public long Id { get; set; } @@ -438,7 +438,7 @@ public async Task> GetAuthorsByBookName(GetAuthors } } - private const string InsertPostgresTypesSql = "INSERT INTO postgres_types (c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, c_text_array, c_integer_array) VALUES ( @c_boolean, @c_bit, @c_smallint, @c_integer, @c_bigint, @c_real, @c_numeric, @c_decimal, @c_double_precision, @c_money, @c_date, @c_time, @c_timestamp, @c_timestamp_with_tz, @c_char, @c_varchar, @c_character_varying, @c_text, @c_bytea, @c_text_array, @c_integer_array ) "; + private const string InsertPostgresTypesSql = "INSERT INTO postgres_types(c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, c_text_array, c_integer_array) VALUES ( @c_boolean, @c_bit, @c_smallint, @c_integer, @c_bigint, @c_real, @c_numeric, @c_decimal, @c_double_precision, @c_money, @c_date, @c_time, @c_timestamp, @c_timestamp_with_tz, @c_char, @c_varchar, @c_character_varying, @c_text, @c_bytea, @c_text_array, @c_integer_array ) "; public class InsertPostgresTypesArgs { public bool? CBoolean { get; set; } @@ -624,10 +624,9 @@ public async Task GetPostgresTypes() return null; } - private const string GetPostgresTypesCntSql = "SELECT COUNT(1) AS cnt , c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea FROM postgres_types GROUP BY c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; + private const string GetPostgresTypesCntSql = "SELECT c_smallint , c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea, COUNT (* ) AS cnt FROM postgres_types GROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, c_bytea LIMIT 1 "; public class GetPostgresTypesCntRow { - public long Cnt { get; set; } public short? CSmallint { get; set; } public bool? CBoolean { get; set; } public int? CInteger { get; set; } @@ -646,6 +645,7 @@ public class GetPostgresTypesCntRow public string CCharacterVarying { get; set; } public string CText { get; set; } public byte[] CBytea { get; set; } + public long Cnt { get; set; } }; public async Task GetPostgresTypesCnt() { @@ -659,25 +659,25 @@ public async Task GetPostgresTypesCnt() { return new GetPostgresTypesCntRow { - Cnt = reader.GetInt64(0), - CSmallint = reader.IsDBNull(1) ? (short? )null : reader.GetInt16(1), - CBoolean = reader.IsDBNull(2) ? (bool? )null : reader.GetBoolean(2), - CInteger = reader.IsDBNull(3) ? (int? )null : reader.GetInt32(3), - CBigint = reader.IsDBNull(4) ? (long? )null : reader.GetInt64(4), - CReal = reader.IsDBNull(5) ? (float? )null : reader.GetFloat(5), - CNumeric = reader.IsDBNull(6) ? (decimal? )null : reader.GetDecimal(6), - CDecimal = reader.IsDBNull(7) ? (decimal? )null : reader.GetDecimal(7), - CDoublePrecision = reader.IsDBNull(8) ? (double? )null : reader.GetDouble(8), - CMoney = reader.IsDBNull(9) ? (decimal? )null : reader.GetDecimal(9), - CDate = reader.IsDBNull(10) ? (DateTime? )null : reader.GetDateTime(10), - CTime = reader.IsDBNull(11) ? (TimeSpan? )null : reader.GetFieldValue(11), - CTimestamp = reader.IsDBNull(12) ? (DateTime? )null : reader.GetDateTime(12), - CTimestampWithTz = reader.IsDBNull(13) ? (DateTime? )null : reader.GetDateTime(13), - CChar = reader.IsDBNull(14) ? null : reader.GetString(14), - CVarchar = reader.IsDBNull(15) ? null : reader.GetString(15), - CCharacterVarying = reader.IsDBNull(16) ? null : reader.GetString(16), - CText = reader.IsDBNull(17) ? null : reader.GetString(17), - CBytea = reader.IsDBNull(18) ? null : reader.GetFieldValue(18) + CSmallint = reader.IsDBNull(0) ? (short? )null : reader.GetInt16(0), + CBoolean = reader.IsDBNull(1) ? (bool? )null : reader.GetBoolean(1), + CInteger = reader.IsDBNull(2) ? (int? )null : reader.GetInt32(2), + CBigint = reader.IsDBNull(3) ? (long? )null : reader.GetInt64(3), + CReal = reader.IsDBNull(4) ? (float? )null : reader.GetFloat(4), + CNumeric = reader.IsDBNull(5) ? (decimal? )null : reader.GetDecimal(5), + CDecimal = reader.IsDBNull(6) ? (decimal? )null : reader.GetDecimal(6), + CDoublePrecision = reader.IsDBNull(7) ? (double? )null : reader.GetDouble(7), + CMoney = reader.IsDBNull(8) ? (decimal? )null : reader.GetDecimal(8), + CDate = reader.IsDBNull(9) ? (DateTime? )null : reader.GetDateTime(9), + CTime = reader.IsDBNull(10) ? (TimeSpan? )null : reader.GetFieldValue(10), + CTimestamp = reader.IsDBNull(11) ? (DateTime? )null : reader.GetDateTime(11), + CTimestampWithTz = reader.IsDBNull(12) ? (DateTime? )null : reader.GetDateTime(12), + CChar = reader.IsDBNull(13) ? null : reader.GetString(13), + CVarchar = reader.IsDBNull(14) ? null : reader.GetString(14), + CCharacterVarying = reader.IsDBNull(15) ? null : reader.GetString(15), + CText = reader.IsDBNull(16) ? null : reader.GetString(16), + CBytea = reader.IsDBNull(17) ? null : reader.GetFieldValue(17), + Cnt = reader.GetInt64(18) }; } } @@ -687,7 +687,7 @@ public async Task GetPostgresTypesCnt() return null; } - private const string GetPostgresFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp FROM postgres_types "; + private const string GetPostgresFunctionsSql = "SELECT MAX ( c_integer ) AS max_integer , MAX (c_varchar ) AS max_varchar, MAX (c_timestamp ) AS max_timestamp FROM postgres_types "; public class GetPostgresFunctionsRow { public int? MaxInteger { get; set; } @@ -718,7 +718,7 @@ public async Task GetPostgresFunctions() return null; } - private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle) VALUES ( @c_point , @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; + private const string InsertPostgresGeoTypesSql = "INSERT INTO postgres_geometric_types ( c_point , c_line, c_lseg, c_box, c_path, c_polygon, c_circle ) VALUES ( @c_point, @c_line, @c_lseg, @c_box, @c_path, @c_polygon, @c_circle ) "; public class InsertPostgresGeoTypesArgs { public NpgsqlPoint? CPoint { get; set; } diff --git a/examples/NpgsqlLegacyExample/request.json b/examples/NpgsqlLegacyExample/request.json index f6046661..6633090d 100644 --- a/examples/NpgsqlLegacyExample/request.json +++ b/examples/NpgsqlLegacyExample/request.json @@ -32285,7 +32285,7 @@ }, "queries": [ { - "text": "SELECT id, name, bio FROM authors WHERE name = $1 LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE name = $1 LIMIT 1", "name": "GetAuthor", "cmd": ":one", "columns": [ @@ -32345,7 +32345,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -32539,7 +32539,7 @@ } }, { - "text": "SELECT id, name, bio FROM authors WHERE id = $1 LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE id = $1 LIMIT 1", "name": "GetAuthorById", "cmd": ":one", "columns": [ @@ -32599,7 +32599,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE($1, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE($1, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -32659,7 +32659,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = $1", + "text": "DELETE FROM authors\nWHERE name = $1", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ @@ -32688,7 +32688,7 @@ "filename": "query.sql" }, { - "text": "UPDATE authors \n SET bio = $1\n WHERE bio IS NOT NULL", + "text": "UPDATE authors\nSET bio = $1\nWHERE bio IS NOT NULL", "name": "UpdateAuthors", "cmd": ":execrows", "parameters": [ @@ -32711,7 +32711,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ANY($1::BIGINT[])", + "text": "SELECT id, name, bio FROM authors\nWHERE id = ANY($1::BIGINT [])", "name": "GetAuthorsByIds", "cmd": ":many", "columns": [ @@ -32769,7 +32769,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ANY($1::BIGINT[]) AND name = ANY($2::TEXT[])", + "text": "SELECT id, name, bio\nFROM authors\nWHERE id = ANY($1::BIGINT []) AND name = ANY($2::TEXT [])", "name": "GetAuthorsByIdsAndNames", "cmd": ":many", "columns": [ @@ -32896,7 +32896,7 @@ } }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors.id = books.author_id ORDER BY authors.name", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors\nINNER JOIN books ON authors.id = books.author_id\nORDER BY authors.name", "name": "ListAllAuthorsBooks", "cmd": ":many", "columns": [ @@ -32920,7 +32920,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio\nFROM authors authors1 JOIN authors authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", + "text": "SELECT\n authors1.id, authors1.name, authors1.bio,\n authors2.id, authors2.name, authors2.bio\nFROM authors AS authors1\nINNER JOIN authors AS authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", "name": "GetDuplicateAuthors", "cmd": ":many", "columns": [ @@ -32944,7 +32944,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description\nFROM authors JOIN books ON authors.id = books.author_id\nWHERE books.name = $1", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nWHERE books.name = $1", "name": "GetAuthorsByBookName", "cmd": ":many", "columns": [ @@ -33012,7 +33012,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO postgres_types \n (c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money,\n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea, c_text_array, c_integer_array)\nVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, \n $11, $12, $13, $14, $15, $16, $17, $18, $19, \n $20, $21)", + "text": "INSERT INTO postgres_types\n(\n c_boolean,\n c_bit,\n c_smallint,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea, c_text_array, c_integer_array\n)\nVALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10,\n $11, $12, $13, $14, $15, $16, $17, $18, $19,\n $20, $21\n)", "name": "InsertPostgresTypes", "cmd": ":exec", "parameters": [ @@ -33342,7 +33342,7 @@ } }, { - "text": "INSERT INTO postgres_types \n (c_boolean, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea)\nVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, \n $10, $11, $12, $13, $14, $15, $16, $17, $18)", + "text": "INSERT INTO postgres_types\n(\n c_boolean,\n c_smallint,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea\n)\nVALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9,\n $10, $11, $12, $13, $14, $15, $16, $17, $18\n)", "name": "InsertPostgresTypesBatch", "cmd": ":copyfrom", "parameters": [ @@ -33893,19 +33893,10 @@ "filename": "query.sql" }, { - "text": "SELECT COUNT(1) AS cnt , \n c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nFROM postgres_types\nGROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, \n c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, \n c_bytea\nLIMIT 1", + "text": "SELECT\n c_smallint,\n c_boolean,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea,\n COUNT(*) AS cnt\nFROM postgres_types\nGROUP BY\n c_smallint,\n c_boolean,\n c_integer,\n c_bigint,\n c_real,\n c_numeric,\n c_decimal,\n c_double_precision,\n c_money,\n c_date,\n c_time,\n c_timestamp,\n c_timestamp_with_tz,\n c_char,\n c_varchar,\n c_character_varying,\n c_text,\n c_bytea\nLIMIT 1", "name": "GetPostgresTypesCnt", "cmd": ":one", "columns": [ - { - "name": "cnt", - "notNull": true, - "length": -1, - "isFuncCall": true, - "type": { - "name": "bigint" - } - }, { "name": "c_smallint", "length": -1, @@ -34117,12 +34108,21 @@ "name": "bytea" }, "originalName": "c_bytea" + }, + { + "name": "cnt", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "bigint" + } } ], "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", + "text": "SELECT\n MAX(c_integer) AS max_integer,\n MAX(c_varchar) AS max_varchar,\n MAX(c_timestamp) AS max_timestamp\nFROM postgres_types", "name": "GetPostgresFunctions", "cmd": ":one", "columns": [ @@ -34157,7 +34157,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", + "text": "INSERT INTO postgres_geometric_types (\n c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle\n)\nVALUES ($1, $2, $3, $4, $5, $6, $7)", "name": "InsertPostgresGeoTypes", "cmd": ":exec", "parameters": [ diff --git a/examples/SqliteDapperExample/QuerySql.cs b/examples/SqliteDapperExample/QuerySql.cs index 246cae96..b0cc960e 100644 --- a/examples/SqliteDapperExample/QuerySql.cs +++ b/examples/SqliteDapperExample/QuerySql.cs @@ -21,7 +21,7 @@ public QuerySql(string connectionString) private string ConnectionString { get; } - private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1"; + private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1 "; public class GetAuthorRow { public required int Id { get; init; } @@ -43,7 +43,7 @@ public class GetAuthorArgs } } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name "; public class ListAuthorsRow { public required int Id { get; init; } @@ -99,7 +99,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) } } - private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1"; + private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1 "; public class GetAuthorByIdRow { public required int Id { get; init; } @@ -121,7 +121,7 @@ public class GetAuthorByIdArgs } } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%')"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) "; public class GetAuthorByNamePatternRow { public required int Id { get; init; } @@ -143,7 +143,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; + private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; public class UpdateAuthorsArgs { public string? Bio { get; init; } @@ -212,7 +212,7 @@ public async Task> GetAuthorsByIdsAndNames(GetA } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name "; public class DeleteAuthorArgs { public required string Name { get; init; } @@ -248,7 +248,7 @@ public async Task CreateBook(CreateBookArgs args) } } - private const string ListAllAuthorsBooksSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id ORDER BY authors . name "; + private const string ListAllAuthorsBooksSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id ORDER BY authors . name "; public class ListAllAuthorsBooksRow { public required Author? Author { get; init; } @@ -275,7 +275,7 @@ public async Task> ListAllAuthorsBooks() } } - private const string GetDuplicateAuthorsSql = "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio FROM authors authors1 JOIN authors authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; + private const string GetDuplicateAuthorsSql = "SELECT authors1 . id , authors1 . name, authors1 . bio, authors2 . id, authors2 . name, authors2 . bio FROM authors AS authors1 INNER JOIN authors AS authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; public class GetDuplicateAuthorsRow { public required Author? Author { get; init; } @@ -302,7 +302,7 @@ public async Task> GetDuplicateAuthors() } } - private const string GetAuthorsByBookNameSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id WHERE books . name = @name "; + private const string GetAuthorsByBookNameSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id WHERE books . name = @name "; public class GetAuthorsByBookNameRow { public required int Id { get; init; } @@ -345,7 +345,7 @@ public async Task DeleteAllAuthors() } } - private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (@c_integer, @c_real, @c_text, @c_blob)"; + private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES ( @c_integer , @c_real, @c_text, @c_blob ) "; public class InsertSqliteTypesArgs { public int? CInteger { get; init; } @@ -410,14 +410,14 @@ public class GetSqliteTypesRow } } - private const string GetSqliteTypesCntSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; + private const string GetSqliteTypesCntSql = "SELECT c_integer , c_real, c_text, c_blob, COUNT (* ) AS cnt FROM types_sqlite GROUP BY c_integer, c_real, c_text, c_blob LIMIT 1 "; public class GetSqliteTypesCntRow { - public required int Cnt { get; init; } public int? CInteger { get; init; } public decimal? CReal { get; init; } public string? CText { get; init; } public byte[]? CBlob { get; init; } + public required int Cnt { get; init; } }; public async Task GetSqliteTypesCnt() { @@ -428,7 +428,7 @@ public class GetSqliteTypesCntRow } } - private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text FROM types_sqlite "; + private const string GetSqliteFunctionsSql = "SELECT MAX ( c_integer ) AS max_integer , MAX (c_real ) AS max_real, MAX (c_text ) AS max_text FROM types_sqlite "; public class GetSqliteFunctionsRow { public int? MaxInteger { get; init; } diff --git a/examples/SqliteDapperExample/request.json b/examples/SqliteDapperExample/request.json index 6d3dec9c..f958376e 100644 --- a/examples/SqliteDapperExample/request.json +++ b/examples/SqliteDapperExample/request.json @@ -165,7 +165,7 @@ }, "queries": [ { - "text": "SELECT id, name, bio FROM authors WHERE name = ? LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE name = ? LIMIT 1", "name": "GetAuthor", "cmd": ":one", "columns": [ @@ -225,7 +225,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -382,7 +382,7 @@ } }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ? LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE id = ? LIMIT 1", "name": "GetAuthorById", "cmd": ":one", "columns": [ @@ -442,7 +442,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(?1, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE(?1, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -502,7 +502,7 @@ "filename": "query.sql" }, { - "text": "UPDATE authors \nSET bio = ?\nWHERE bio IS NOT NULL", + "text": "UPDATE authors\nSET bio = ?\nWHERE bio IS NOT NULL", "name": "UpdateAuthors", "cmd": ":execrows", "parameters": [ @@ -666,7 +666,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = ?", + "text": "DELETE FROM authors\nWHERE name = ?", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ @@ -746,7 +746,7 @@ } }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description \nFROM authors JOIN books ON authors.id = books.author_id \nORDER BY authors.name", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nORDER BY authors.name", "name": "ListAllAuthorsBooks", "cmd": ":many", "columns": [ @@ -770,7 +770,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio\nFROM authors authors1 JOIN authors authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", + "text": "SELECT\n authors1.id, authors1.name, authors1.bio,\n authors2.id, authors2.name, authors2.bio\nFROM authors AS authors1\nINNER JOIN authors AS authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", "name": "GetDuplicateAuthors", "cmd": ":many", "columns": [ @@ -794,7 +794,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description\nFROM authors JOIN books ON authors.id = books.author_id\nWHERE books.name = ?", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nWHERE books.name = ?", "name": "GetAuthorsByBookName", "cmd": ":many", "columns": [ @@ -868,7 +868,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (?, ?, ?, ?)", + "text": "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (\n ?, ?, ?, ?\n)", "name": "InsertSqliteTypes", "cmd": ":exec", "parameters": [ @@ -1047,19 +1047,10 @@ "filename": "query.sql" }, { - "text": "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", + "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n COUNT(*) AS cnt\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", "name": "GetSqliteTypesCnt", "cmd": ":one", "columns": [ - { - "name": "cnt", - "notNull": true, - "length": -1, - "isFuncCall": true, - "type": { - "name": "integer" - } - }, { "name": "c_integer", "length": -1, @@ -1103,12 +1094,21 @@ "name": "BLOB" }, "originalName": "c_blob" + }, + { + "name": "cnt", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "integer" + } } ], "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text\nFROM types_sqlite", + "text": "SELECT\n MAX(c_integer) AS max_integer,\n MAX(c_real) AS max_real,\n MAX(c_text) AS max_text\nFROM types_sqlite", "name": "GetSqliteFunctions", "cmd": ":one", "columns": [ diff --git a/examples/SqliteDapperLegacyExample/QuerySql.cs b/examples/SqliteDapperLegacyExample/QuerySql.cs index 2e05def2..cbb5f959 100644 --- a/examples/SqliteDapperLegacyExample/QuerySql.cs +++ b/examples/SqliteDapperLegacyExample/QuerySql.cs @@ -22,7 +22,7 @@ public QuerySql(string connectionString) private string ConnectionString { get; } - private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1"; + private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1 "; public class GetAuthorRow { public int Id { get; set; } @@ -44,7 +44,7 @@ public async Task GetAuthor(GetAuthorArgs args) } } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name "; public class ListAuthorsRow { public int Id { get; set; } @@ -100,7 +100,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) } } - private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1"; + private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1 "; public class GetAuthorByIdRow { public int Id { get; set; } @@ -122,7 +122,7 @@ public async Task GetAuthorById(GetAuthorByIdArgs args) } } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%')"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) "; public class GetAuthorByNamePatternRow { public int Id { get; set; } @@ -144,7 +144,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; + private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; public class UpdateAuthorsArgs { public string Bio { get; set; } @@ -213,7 +213,7 @@ public async Task> GetAuthorsByIdsAndNames(GetA } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name "; public class DeleteAuthorArgs { public string Name { get; set; } @@ -249,7 +249,7 @@ public async Task CreateBook(CreateBookArgs args) } } - private const string ListAllAuthorsBooksSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id ORDER BY authors . name "; + private const string ListAllAuthorsBooksSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id ORDER BY authors . name "; public class ListAllAuthorsBooksRow { public Author Author { get; set; } @@ -276,7 +276,7 @@ public async Task> ListAllAuthorsBooks() } } - private const string GetDuplicateAuthorsSql = "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio FROM authors authors1 JOIN authors authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; + private const string GetDuplicateAuthorsSql = "SELECT authors1 . id , authors1 . name, authors1 . bio, authors2 . id, authors2 . name, authors2 . bio FROM authors AS authors1 INNER JOIN authors AS authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; public class GetDuplicateAuthorsRow { public Author Author { get; set; } @@ -303,7 +303,7 @@ public async Task> GetDuplicateAuthors() } } - private const string GetAuthorsByBookNameSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id WHERE books . name = @name "; + private const string GetAuthorsByBookNameSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id WHERE books . name = @name "; public class GetAuthorsByBookNameRow { public int Id { get; set; } @@ -346,7 +346,7 @@ public async Task DeleteAllAuthors() } } - private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (@c_integer, @c_real, @c_text, @c_blob)"; + private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES ( @c_integer , @c_real, @c_text, @c_blob ) "; public class InsertSqliteTypesArgs { public int? CInteger { get; set; } @@ -411,14 +411,14 @@ public async Task GetSqliteTypes() } } - private const string GetSqliteTypesCntSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; + private const string GetSqliteTypesCntSql = "SELECT c_integer , c_real, c_text, c_blob, COUNT (* ) AS cnt FROM types_sqlite GROUP BY c_integer, c_real, c_text, c_blob LIMIT 1 "; public class GetSqliteTypesCntRow { - public int Cnt { get; set; } public int? CInteger { get; set; } public decimal? CReal { get; set; } public string CText { get; set; } public byte[] CBlob { get; set; } + public int Cnt { get; set; } }; public async Task GetSqliteTypesCnt() { @@ -429,7 +429,7 @@ public async Task GetSqliteTypesCnt() } } - private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text FROM types_sqlite "; + private const string GetSqliteFunctionsSql = "SELECT MAX ( c_integer ) AS max_integer , MAX (c_real ) AS max_real, MAX (c_text ) AS max_text FROM types_sqlite "; public class GetSqliteFunctionsRow { public int? MaxInteger { get; set; } diff --git a/examples/SqliteDapperLegacyExample/request.json b/examples/SqliteDapperLegacyExample/request.json index 2516c43d..c90996aa 100644 --- a/examples/SqliteDapperLegacyExample/request.json +++ b/examples/SqliteDapperLegacyExample/request.json @@ -165,7 +165,7 @@ }, "queries": [ { - "text": "SELECT id, name, bio FROM authors WHERE name = ? LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE name = ? LIMIT 1", "name": "GetAuthor", "cmd": ":one", "columns": [ @@ -225,7 +225,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -382,7 +382,7 @@ } }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ? LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE id = ? LIMIT 1", "name": "GetAuthorById", "cmd": ":one", "columns": [ @@ -442,7 +442,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(?1, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE(?1, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -502,7 +502,7 @@ "filename": "query.sql" }, { - "text": "UPDATE authors \nSET bio = ?\nWHERE bio IS NOT NULL", + "text": "UPDATE authors\nSET bio = ?\nWHERE bio IS NOT NULL", "name": "UpdateAuthors", "cmd": ":execrows", "parameters": [ @@ -666,7 +666,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = ?", + "text": "DELETE FROM authors\nWHERE name = ?", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ @@ -746,7 +746,7 @@ } }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description \nFROM authors JOIN books ON authors.id = books.author_id \nORDER BY authors.name", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nORDER BY authors.name", "name": "ListAllAuthorsBooks", "cmd": ":many", "columns": [ @@ -770,7 +770,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio\nFROM authors authors1 JOIN authors authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", + "text": "SELECT\n authors1.id, authors1.name, authors1.bio,\n authors2.id, authors2.name, authors2.bio\nFROM authors AS authors1\nINNER JOIN authors AS authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", "name": "GetDuplicateAuthors", "cmd": ":many", "columns": [ @@ -794,7 +794,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description\nFROM authors JOIN books ON authors.id = books.author_id\nWHERE books.name = ?", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nWHERE books.name = ?", "name": "GetAuthorsByBookName", "cmd": ":many", "columns": [ @@ -868,7 +868,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (?, ?, ?, ?)", + "text": "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (\n ?, ?, ?, ?\n)", "name": "InsertSqliteTypes", "cmd": ":exec", "parameters": [ @@ -1047,19 +1047,10 @@ "filename": "query.sql" }, { - "text": "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", + "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n COUNT(*) AS cnt\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", "name": "GetSqliteTypesCnt", "cmd": ":one", "columns": [ - { - "name": "cnt", - "notNull": true, - "length": -1, - "isFuncCall": true, - "type": { - "name": "integer" - } - }, { "name": "c_integer", "length": -1, @@ -1103,12 +1094,21 @@ "name": "BLOB" }, "originalName": "c_blob" + }, + { + "name": "cnt", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "integer" + } } ], "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text\nFROM types_sqlite", + "text": "SELECT\n MAX(c_integer) AS max_integer,\n MAX(c_real) AS max_real,\n MAX(c_text) AS max_text\nFROM types_sqlite", "name": "GetSqliteFunctions", "cmd": ":one", "columns": [ diff --git a/examples/SqliteExample/QuerySql.cs b/examples/SqliteExample/QuerySql.cs index dc463e80..fdf44081 100644 --- a/examples/SqliteExample/QuerySql.cs +++ b/examples/SqliteExample/QuerySql.cs @@ -19,7 +19,7 @@ public QuerySql(string connectionString) private string ConnectionString { get; } - private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1"; + private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1 "; public readonly record struct GetAuthorRow(int Id, string Name, string? Bio); public readonly record struct GetAuthorArgs(string Name); public async Task GetAuthor(GetAuthorArgs args) @@ -48,7 +48,7 @@ public QuerySql(string connectionString) return null; } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name "; public readonly record struct ListAuthorsRow(int Id, string Name, string? Bio); public async Task> ListAuthors() { @@ -106,7 +106,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) } } - private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1"; + private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1 "; public readonly record struct GetAuthorByIdRow(int Id, string Name, string? Bio); public readonly record struct GetAuthorByIdArgs(int Id); public async Task GetAuthorById(GetAuthorByIdArgs args) @@ -135,7 +135,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) return null; } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%')"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) "; public readonly record struct GetAuthorByNamePatternRow(int Id, string Name, string? Bio); public readonly record struct GetAuthorByNamePatternArgs(string? NamePattern); public async Task> GetAuthorByNamePattern(GetAuthorByNamePatternArgs args) @@ -160,7 +160,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; + private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; public readonly record struct UpdateAuthorsArgs(string? Bio); public async Task UpdateAuthors(UpdateAuthorsArgs args) { @@ -234,7 +234,7 @@ public async Task> GetAuthorsByIdsAndNames(GetA } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name "; public readonly record struct DeleteAuthorArgs(string Name); public async Task DeleteAuthor(DeleteAuthorArgs args) { @@ -267,7 +267,7 @@ public async Task CreateBook(CreateBookArgs args) } } - private const string ListAllAuthorsBooksSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id ORDER BY authors . name "; + private const string ListAllAuthorsBooksSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id ORDER BY authors . name "; public readonly record struct ListAllAuthorsBooksRow(Author? Author, Book? Book); public async Task> ListAllAuthorsBooks() { @@ -290,7 +290,7 @@ public async Task> ListAllAuthorsBooks() } } - private const string GetDuplicateAuthorsSql = "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio FROM authors authors1 JOIN authors authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; + private const string GetDuplicateAuthorsSql = "SELECT authors1 . id , authors1 . name, authors1 . bio, authors2 . id, authors2 . name, authors2 . bio FROM authors AS authors1 INNER JOIN authors AS authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; public readonly record struct GetDuplicateAuthorsRow(Author? Author, Author? Author2); public async Task> GetDuplicateAuthors() { @@ -313,7 +313,7 @@ public async Task> GetDuplicateAuthors() } } - private const string GetAuthorsByBookNameSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id WHERE books . name = @name "; + private const string GetAuthorsByBookNameSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id WHERE books . name = @name "; public readonly record struct GetAuthorsByBookNameRow(int Id, string Name, string? Bio, Book? Book); public readonly record struct GetAuthorsByBookNameArgs(string Name); public async Task> GetAuthorsByBookName(GetAuthorsByBookNameArgs args) @@ -351,7 +351,7 @@ public async Task DeleteAllAuthors() } } - private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (@c_integer, @c_real, @c_text, @c_blob)"; + private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES ( @c_integer , @c_real, @c_text, @c_blob ) "; public readonly record struct InsertSqliteTypesArgs(int? CInteger, decimal? CReal, string? CText, byte[]? CBlob); public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) { @@ -419,8 +419,8 @@ public async Task InsertSqliteTypesBatch(List args) return null; } - private const string GetSqliteTypesCntSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; - public readonly record struct GetSqliteTypesCntRow(int Cnt, int? CInteger, decimal? CReal, string? CText, byte[]? CBlob); + private const string GetSqliteTypesCntSql = "SELECT c_integer , c_real, c_text, c_blob, COUNT (* ) AS cnt FROM types_sqlite GROUP BY c_integer, c_real, c_text, c_blob LIMIT 1 "; + public readonly record struct GetSqliteTypesCntRow(int? CInteger, decimal? CReal, string? CText, byte[]? CBlob, int Cnt); public async Task GetSqliteTypesCnt() { using (var connection = new SqliteConnection(ConnectionString)) @@ -434,11 +434,11 @@ public async Task InsertSqliteTypesBatch(List args) { return new GetSqliteTypesCntRow { - Cnt = reader.GetInt32(0), - CInteger = reader.IsDBNull(1) ? null : reader.GetInt32(1), - CReal = reader.IsDBNull(2) ? null : reader.GetDecimal(2), - CText = reader.IsDBNull(3) ? null : reader.GetString(3), - CBlob = reader.IsDBNull(4) ? null : reader.GetFieldValue(4) + CInteger = reader.IsDBNull(0) ? null : reader.GetInt32(0), + CReal = reader.IsDBNull(1) ? null : reader.GetDecimal(1), + CText = reader.IsDBNull(2) ? null : reader.GetString(2), + CBlob = reader.IsDBNull(3) ? null : reader.GetFieldValue(3), + Cnt = reader.GetInt32(4) }; } } @@ -448,7 +448,7 @@ public async Task InsertSqliteTypesBatch(List args) return null; } - private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text FROM types_sqlite "; + private const string GetSqliteFunctionsSql = "SELECT MAX ( c_integer ) AS max_integer , MAX (c_real ) AS max_real, MAX (c_text ) AS max_text FROM types_sqlite "; public readonly record struct GetSqliteFunctionsRow(int? MaxInteger, decimal MaxReal, object? MaxText); public async Task GetSqliteFunctions() { diff --git a/examples/SqliteExample/request.json b/examples/SqliteExample/request.json index fe748a47..e5ad7239 100644 --- a/examples/SqliteExample/request.json +++ b/examples/SqliteExample/request.json @@ -165,7 +165,7 @@ }, "queries": [ { - "text": "SELECT id, name, bio FROM authors WHERE name = ? LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE name = ? LIMIT 1", "name": "GetAuthor", "cmd": ":one", "columns": [ @@ -225,7 +225,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -382,7 +382,7 @@ } }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ? LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE id = ? LIMIT 1", "name": "GetAuthorById", "cmd": ":one", "columns": [ @@ -442,7 +442,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(?1, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE(?1, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -502,7 +502,7 @@ "filename": "query.sql" }, { - "text": "UPDATE authors \nSET bio = ?\nWHERE bio IS NOT NULL", + "text": "UPDATE authors\nSET bio = ?\nWHERE bio IS NOT NULL", "name": "UpdateAuthors", "cmd": ":execrows", "parameters": [ @@ -666,7 +666,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = ?", + "text": "DELETE FROM authors\nWHERE name = ?", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ @@ -746,7 +746,7 @@ } }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description \nFROM authors JOIN books ON authors.id = books.author_id \nORDER BY authors.name", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nORDER BY authors.name", "name": "ListAllAuthorsBooks", "cmd": ":many", "columns": [ @@ -770,7 +770,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio\nFROM authors authors1 JOIN authors authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", + "text": "SELECT\n authors1.id, authors1.name, authors1.bio,\n authors2.id, authors2.name, authors2.bio\nFROM authors AS authors1\nINNER JOIN authors AS authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", "name": "GetDuplicateAuthors", "cmd": ":many", "columns": [ @@ -794,7 +794,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description\nFROM authors JOIN books ON authors.id = books.author_id\nWHERE books.name = ?", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nWHERE books.name = ?", "name": "GetAuthorsByBookName", "cmd": ":many", "columns": [ @@ -868,7 +868,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (?, ?, ?, ?)", + "text": "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (\n ?, ?, ?, ?\n)", "name": "InsertSqliteTypes", "cmd": ":exec", "parameters": [ @@ -1047,19 +1047,10 @@ "filename": "query.sql" }, { - "text": "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", + "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n COUNT(*) AS cnt\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", "name": "GetSqliteTypesCnt", "cmd": ":one", "columns": [ - { - "name": "cnt", - "notNull": true, - "length": -1, - "isFuncCall": true, - "type": { - "name": "integer" - } - }, { "name": "c_integer", "length": -1, @@ -1103,12 +1094,21 @@ "name": "BLOB" }, "originalName": "c_blob" + }, + { + "name": "cnt", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "integer" + } } ], "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text\nFROM types_sqlite", + "text": "SELECT\n MAX(c_integer) AS max_integer,\n MAX(c_real) AS max_real,\n MAX(c_text) AS max_text\nFROM types_sqlite", "name": "GetSqliteFunctions", "cmd": ":one", "columns": [ diff --git a/examples/SqliteLegacyExample/QuerySql.cs b/examples/SqliteLegacyExample/QuerySql.cs index a831151f..fc5f16c4 100644 --- a/examples/SqliteLegacyExample/QuerySql.cs +++ b/examples/SqliteLegacyExample/QuerySql.cs @@ -20,7 +20,7 @@ public QuerySql(string connectionString) private string ConnectionString { get; } - private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1"; + private const string GetAuthorSql = "SELECT id, name, bio FROM authors WHERE name = @name LIMIT 1 "; public class GetAuthorRow { public int Id { get; set; } @@ -57,7 +57,7 @@ public async Task GetAuthor(GetAuthorArgs args) return null; } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name "; public class ListAuthorsRow { public int Id { get; set; } @@ -132,7 +132,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) } } - private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1"; + private const string GetAuthorByIdSql = "SELECT id, name, bio FROM authors WHERE id = @id LIMIT 1 "; public class GetAuthorByIdRow { public int Id { get; set; } @@ -169,7 +169,7 @@ public async Task GetAuthorById(GetAuthorByIdArgs args) return null; } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%')"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) "; public class GetAuthorByNamePatternRow { public int Id { get; set; } @@ -202,7 +202,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; + private const string UpdateAuthorsSql = "UPDATE authors SET bio = @bio WHERE bio IS NOT NULL "; public class UpdateAuthorsArgs { public string Bio { get; set; } @@ -296,7 +296,7 @@ public async Task> GetAuthorsByIdsAndNames(GetA } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name "; public class DeleteAuthorArgs { public string Name { get; set; } @@ -339,7 +339,7 @@ public async Task CreateBook(CreateBookArgs args) } } - private const string ListAllAuthorsBooksSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id ORDER BY authors . name "; + private const string ListAllAuthorsBooksSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id ORDER BY authors . name "; public class ListAllAuthorsBooksRow { public Author Author { get; set; } @@ -366,7 +366,7 @@ public async Task> ListAllAuthorsBooks() } } - private const string GetDuplicateAuthorsSql = "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio FROM authors authors1 JOIN authors authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; + private const string GetDuplicateAuthorsSql = "SELECT authors1 . id , authors1 . name, authors1 . bio, authors2 . id, authors2 . name, authors2 . bio FROM authors AS authors1 INNER JOIN authors AS authors2 ON authors1 . name = authors2 . name WHERE authors1 . id < authors2 . id "; public class GetDuplicateAuthorsRow { public Author Author { get; set; } @@ -393,7 +393,7 @@ public async Task> GetDuplicateAuthors() } } - private const string GetAuthorsByBookNameSql = "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description FROM authors JOIN books ON authors . id = books . author_id WHERE books . name = @name "; + private const string GetAuthorsByBookNameSql = "SELECT authors . id , authors . name, authors . bio, books . id, books . name, books . author_id, books . description FROM authors INNER JOIN books ON authors . id = books . author_id WHERE books . name = @name "; public class GetAuthorsByBookNameRow { public int Id { get; set; } @@ -440,7 +440,7 @@ public async Task DeleteAllAuthors() } } - private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (@c_integer, @c_real, @c_text, @c_blob)"; + private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES ( @c_integer , @c_real, @c_text, @c_blob ) "; public class InsertSqliteTypesArgs { public int? CInteger { get; set; } @@ -525,14 +525,14 @@ public async Task GetSqliteTypes() return null; } - private const string GetSqliteTypesCntSql = "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob FROM types_sqlite GROUP BY c_integer , c_real, c_text, c_blob LIMIT 1 "; + private const string GetSqliteTypesCntSql = "SELECT c_integer , c_real, c_text, c_blob, COUNT (* ) AS cnt FROM types_sqlite GROUP BY c_integer, c_real, c_text, c_blob LIMIT 1 "; public class GetSqliteTypesCntRow { - public int Cnt { get; set; } public int? CInteger { get; set; } public decimal? CReal { get; set; } public string CText { get; set; } public byte[] CBlob { get; set; } + public int Cnt { get; set; } }; public async Task GetSqliteTypesCnt() { @@ -547,11 +547,11 @@ public async Task GetSqliteTypesCnt() { return new GetSqliteTypesCntRow { - Cnt = reader.GetInt32(0), - CInteger = reader.IsDBNull(1) ? (int? )null : reader.GetInt32(1), - CReal = reader.IsDBNull(2) ? (decimal? )null : reader.GetDecimal(2), - CText = reader.IsDBNull(3) ? null : reader.GetString(3), - CBlob = reader.IsDBNull(4) ? null : reader.GetFieldValue(4) + CInteger = reader.IsDBNull(0) ? (int? )null : reader.GetInt32(0), + CReal = reader.IsDBNull(1) ? (decimal? )null : reader.GetDecimal(1), + CText = reader.IsDBNull(2) ? null : reader.GetString(2), + CBlob = reader.IsDBNull(3) ? null : reader.GetFieldValue(3), + Cnt = reader.GetInt32(4) }; } } @@ -561,7 +561,7 @@ public async Task GetSqliteTypesCnt() return null; } - private const string GetSqliteFunctionsSql = "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text FROM types_sqlite "; + private const string GetSqliteFunctionsSql = "SELECT MAX ( c_integer ) AS max_integer , MAX (c_real ) AS max_real, MAX (c_text ) AS max_text FROM types_sqlite "; public class GetSqliteFunctionsRow { public int? MaxInteger { get; set; } diff --git a/examples/SqliteLegacyExample/request.json b/examples/SqliteLegacyExample/request.json index 1de169ce..68939a2d 100644 --- a/examples/SqliteLegacyExample/request.json +++ b/examples/SqliteLegacyExample/request.json @@ -165,7 +165,7 @@ }, "queries": [ { - "text": "SELECT id, name, bio FROM authors WHERE name = ? LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE name = ? LIMIT 1", "name": "GetAuthor", "cmd": ":one", "columns": [ @@ -225,7 +225,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -382,7 +382,7 @@ } }, { - "text": "SELECT id, name, bio FROM authors WHERE id = ? LIMIT 1", + "text": "SELECT id, name, bio FROM authors\nWHERE id = ? LIMIT 1", "name": "GetAuthorById", "cmd": ":one", "columns": [ @@ -442,7 +442,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(?1, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE(?1, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -502,7 +502,7 @@ "filename": "query.sql" }, { - "text": "UPDATE authors \nSET bio = ?\nWHERE bio IS NOT NULL", + "text": "UPDATE authors\nSET bio = ?\nWHERE bio IS NOT NULL", "name": "UpdateAuthors", "cmd": ":execrows", "parameters": [ @@ -666,7 +666,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = ?", + "text": "DELETE FROM authors\nWHERE name = ?", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ @@ -746,7 +746,7 @@ } }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description \nFROM authors JOIN books ON authors.id = books.author_id \nORDER BY authors.name", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nORDER BY authors.name", "name": "ListAllAuthorsBooks", "cmd": ":many", "columns": [ @@ -770,7 +770,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors1.id, authors1.name, authors1.bio, authors2.id, authors2.name, authors2.bio\nFROM authors authors1 JOIN authors authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", + "text": "SELECT\n authors1.id, authors1.name, authors1.bio,\n authors2.id, authors2.name, authors2.bio\nFROM authors AS authors1\nINNER JOIN authors AS authors2 ON authors1.name = authors2.name\nWHERE authors1.id \u003c authors2.id", "name": "GetDuplicateAuthors", "cmd": ":many", "columns": [ @@ -794,7 +794,7 @@ "filename": "query.sql" }, { - "text": "SELECT authors.id, authors.name, authors.bio, books.id, books.name, books.author_id, books.description\nFROM authors JOIN books ON authors.id = books.author_id\nWHERE books.name = ?", + "text": "SELECT\n authors.id, authors.name, authors.bio,\n books.id, books.name, books.author_id, books.description\nFROM authors INNER JOIN books ON authors.id = books.author_id\nWHERE books.name = ?", "name": "GetAuthorsByBookName", "cmd": ":many", "columns": [ @@ -868,7 +868,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (?, ?, ?, ?)", + "text": "INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (\n ?, ?, ?, ?\n)", "name": "InsertSqliteTypes", "cmd": ":exec", "parameters": [ @@ -1047,19 +1047,10 @@ "filename": "query.sql" }, { - "text": "SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", + "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n COUNT(*) AS cnt\nFROM types_sqlite\nGROUP BY c_integer, c_real, c_text, c_blob\nLIMIT 1", "name": "GetSqliteTypesCnt", "cmd": ":one", "columns": [ - { - "name": "cnt", - "notNull": true, - "length": -1, - "isFuncCall": true, - "type": { - "name": "integer" - } - }, { "name": "c_integer", "length": -1, @@ -1103,12 +1094,21 @@ "name": "BLOB" }, "originalName": "c_blob" + }, + { + "name": "cnt", + "notNull": true, + "length": -1, + "isFuncCall": true, + "type": { + "name": "integer" + } } ], "filename": "query.sql" }, { - "text": "SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text\nFROM types_sqlite", + "text": "SELECT\n MAX(c_integer) AS max_integer,\n MAX(c_real) AS max_real,\n MAX(c_text) AS max_text\nFROM types_sqlite", "name": "GetSqliteFunctions", "cmd": ":one", "columns": [ diff --git a/examples/config/postgresql/query.sql b/examples/config/postgresql/query.sql index d5313639..146217e2 100644 --- a/examples/config/postgresql/query.sql +++ b/examples/config/postgresql/query.sql @@ -1,8 +1,10 @@ -- name: GetAuthor :one -SELECT * FROM authors WHERE name = $1 LIMIT 1; +SELECT * FROM authors +WHERE name = $1 LIMIT 1; -- name: ListAuthors :many -SELECT * FROM authors ORDER BY name; +SELECT * FROM authors +ORDER BY name; -- name: CreateAuthor :one INSERT INTO authors (id, name, bio) VALUES ($1, $2, $3) RETURNING *; @@ -11,81 +13,173 @@ INSERT INTO authors (id, name, bio) VALUES ($1, $2, $3) RETURNING *; INSERT INTO authors (name, bio) VALUES ($1, $2) RETURNING id; -- name: GetAuthorById :one -SELECT * FROM authors WHERE id = $1 LIMIT 1; +SELECT * FROM authors +WHERE id = $1 LIMIT 1; -- name: GetAuthorByNamePattern :many -SELECT * FROM authors WHERE name LIKE COALESCE(sqlc.narg('name_pattern'), '%'); +SELECT * FROM authors +WHERE name LIKE COALESCE(sqlc.narg('name_pattern'), '%'); -- name: DeleteAuthor :exec -DELETE FROM authors WHERE name = $1; +DELETE FROM authors +WHERE name = $1; -- name: TruncateAuthors :exec TRUNCATE TABLE authors CASCADE; -- name: UpdateAuthors :execrows -UPDATE authors - SET bio = $1 - WHERE bio IS NOT NULL; +UPDATE authors +SET bio = $1 +WHERE bio IS NOT NULL; -- name: GetAuthorsByIds :many -SELECT * FROM authors WHERE id = ANY($1::BIGINT[]); +SELECT * FROM authors +WHERE id = ANY($1::BIGINT []); -- name: GetAuthorsByIdsAndNames :many -SELECT * FROM authors WHERE id = ANY($1::BIGINT[]) AND name = ANY($2::TEXT[]);; +SELECT * +FROM authors +WHERE id = ANY($1::BIGINT []) AND name = ANY($2::TEXT []);; -- name: CreateBook :execlastid INSERT INTO books (name, author_id) VALUES ($1, $2) RETURNING id; -- name: ListAllAuthorsBooks :many -SELECT sqlc.embed(authors), sqlc.embed(books) FROM authors JOIN books ON authors.id = books.author_id ORDER BY authors.name; +SELECT + sqlc.embed(authors), + sqlc.embed(books) +FROM authors +INNER JOIN books ON authors.id = books.author_id +ORDER BY authors.name; -- name: GetDuplicateAuthors :many -SELECT sqlc.embed(authors1), sqlc.embed(authors2) -FROM authors authors1 JOIN authors authors2 ON authors1.name = authors2.name +SELECT + sqlc.embed(authors1), + sqlc.embed(authors2) +FROM authors AS authors1 +INNER JOIN authors AS authors2 ON authors1.name = authors2.name WHERE authors1.id < authors2.id; -- name: GetAuthorsByBookName :many -SELECT authors.*, sqlc.embed(books) -FROM authors JOIN books ON authors.id = books.author_id +SELECT + authors.*, + sqlc.embed(books) +FROM authors INNER JOIN books ON authors.id = books.author_id WHERE books.name = $1; -- name: InsertPostgresTypes :exec -INSERT INTO postgres_types - (c_boolean, c_bit, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, - c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, - c_bytea, c_text_array, c_integer_array) -VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, - $11, $12, $13, $14, $15, $16, $17, $18, $19, - $20, $21); +INSERT INTO postgres_types +( + c_boolean, + c_bit, + c_smallint, + c_integer, + c_bigint, + c_real, + c_numeric, + c_decimal, + c_double_precision, + c_money, + c_date, + c_time, + c_timestamp, + c_timestamp_with_tz, + c_char, + c_varchar, + c_character_varying, + c_text, + c_bytea, c_text_array, c_integer_array +) +VALUES ( + $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, + $11, $12, $13, $14, $15, $16, $17, $18, $19, + $20, $21 +); -- name: InsertPostgresTypesBatch :copyfrom -INSERT INTO postgres_types - (c_boolean, c_smallint, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, - c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, - c_bytea) -VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, - $10, $11, $12, $13, $14, $15, $16, $17, $18); +INSERT INTO postgres_types +( + c_boolean, + c_smallint, + c_integer, + c_bigint, + c_real, + c_numeric, + c_decimal, + c_double_precision, + c_money, + c_date, + c_time, + c_timestamp, + c_timestamp_with_tz, + c_char, + c_varchar, + c_character_varying, + c_text, + c_bytea +) +VALUES ( + $1, $2, $3, $4, $5, $6, $7, $8, $9, + $10, $11, $12, $13, $14, $15, $16, $17, $18 +); -- name: GetPostgresTypes :one SELECT * FROM postgres_types LIMIT 1; -- name: GetPostgresTypesCnt :one -SELECT COUNT(1) AS cnt , - c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, - c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, - c_bytea +SELECT + c_smallint, + c_boolean, + c_integer, + c_bigint, + c_real, + c_numeric, + c_decimal, + c_double_precision, + c_money, + c_date, + c_time, + c_timestamp, + c_timestamp_with_tz, + c_char, + c_varchar, + c_character_varying, + c_text, + c_bytea, + COUNT(*) AS cnt FROM postgres_types -GROUP BY c_smallint, c_boolean, c_integer, c_bigint, c_real, c_numeric, c_decimal, c_double_precision, c_money, - c_date, c_time, c_timestamp, c_timestamp_with_tz, c_char, c_varchar, c_character_varying, c_text, - c_bytea +GROUP BY + c_smallint, + c_boolean, + c_integer, + c_bigint, + c_real, + c_numeric, + c_decimal, + c_double_precision, + c_money, + c_date, + c_time, + c_timestamp, + c_timestamp_with_tz, + c_char, + c_varchar, + c_character_varying, + c_text, + c_bytea LIMIT 1; -- name: GetPostgresFunctions :one -SELECT MAX(c_integer) AS max_integer, MAX(c_varchar) AS max_varchar, MAX(c_timestamp) AS max_timestamp +SELECT + MAX(c_integer) AS max_integer, + MAX(c_varchar) AS max_varchar, + MAX(c_timestamp) AS max_timestamp FROM postgres_types; -- name: InsertPostgresGeoTypes :exec -INSERT INTO postgres_geometric_types (c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle) +INSERT INTO postgres_geometric_types ( + c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle +) VALUES ($1, $2, $3, $4, $5, $6, $7); -- name: GetPostgresGeoTypes :one @@ -96,4 +190,3 @@ TRUNCATE TABLE postgres_types; -- name: TruncatePostgresGeoTypes :exec TRUNCATE TABLE postgres_geometric_types; - diff --git a/examples/config/postgresql/schema.sql b/examples/config/postgresql/schema.sql index edbb7f9a..9a5bd834 100644 --- a/examples/config/postgresql/schema.sql +++ b/examples/config/postgresql/schema.sql @@ -1,56 +1,56 @@ CREATE TABLE authors ( - id BIGSERIAL PRIMARY KEY, - name TEXT NOT NULL, - bio TEXT + id BIGSERIAL PRIMARY KEY, + name TEXT NOT NULL, + bio TEXT ); CREATE TABLE books ( - id BIGSERIAL PRIMARY KEY, - name TEXT NOT NULL, - author_id BIGINT NOT NULL, - description TEXT, + id BIGSERIAL PRIMARY KEY, + name TEXT NOT NULL, + author_id BIGINT NOT NULL, + description TEXT, FOREIGN KEY (author_id) REFERENCES authors (id) ON DELETE CASCADE ); CREATE TABLE postgres_types ( /* Numeric Data Types */ - c_boolean BOOLEAN, - c_bit BIT(10), - c_smallint SMALLINT, - c_integer INTEGER, - c_bigint BIGINT, - c_decimal DECIMAL(10,7), - c_numeric NUMERIC(10,7), - c_real REAL, - c_double_precision DOUBLE PRECISION, - c_money MONEY, - + c_boolean BOOLEAN, + c_bit BIT(10), + c_smallint SMALLINT, + c_integer INTEGER, + c_bigint BIGINT, + c_decimal DECIMAL(10, 7), + c_numeric NUMERIC(10, 7), + c_real REAL, + c_double_precision DOUBLE PRECISION, + c_money MONEY, + /* Date and Time Data Types */ - c_date DATE, - c_time TIME, - c_timestamp TIMESTAMP, + c_date DATE, + c_time TIME, + c_timestamp TIMESTAMP, c_timestamp_with_tz TIMESTAMP WITH TIME ZONE, - + /* String Data Type Syntax */ - c_char CHAR, - c_varchar VARCHAR(100), + c_char CHAR, + c_varchar VARCHAR(100), c_character_varying CHARACTER VARYING(100), - c_bytea BYTEA, - c_text TEXT, - c_json JSON, + c_bytea BYTEA, + c_text TEXT, + c_json JSON, /* Array Data Types */ - c_text_array TEXT[], - c_integer_array INTEGER[] + c_text_array TEXT [], + c_integer_array INTEGER [] ); CREATE TABLE postgres_geometric_types ( - c_point POINT, - c_line LINE, - c_lseg LSEG, - c_box BOX, - c_path PATH, - c_polygon POLYGON, - c_circle CIRCLE -); \ No newline at end of file + c_point POINT, + c_line LINE, + c_lseg LSEG, + c_box BOX, + c_path PATH, + c_polygon POLYGON, + c_circle CIRCLE +); diff --git a/examples/config/sqlite/query.sql b/examples/config/sqlite/query.sql index 04497ff6..9e9c8803 100644 --- a/examples/config/sqlite/query.sql +++ b/examples/config/sqlite/query.sql @@ -1,8 +1,10 @@ -- name: GetAuthor :one -SELECT * FROM authors WHERE name = ? LIMIT 1; +SELECT * FROM authors +WHERE name = ? LIMIT 1; -- name: ListAuthors :many -SELECT * FROM authors ORDER BY name; +SELECT * FROM authors +ORDER BY name; -- name: CreateAuthor :exec INSERT INTO authors (id, name, bio) VALUES (?, ?, ?); @@ -11,13 +13,15 @@ INSERT INTO authors (id, name, bio) VALUES (?, ?, ?); INSERT INTO authors (name, bio) VALUES (?, ?) RETURNING id; -- name: GetAuthorById :one -SELECT * FROM authors WHERE id = ? LIMIT 1; +SELECT * FROM authors +WHERE id = ? LIMIT 1; -- name: GetAuthorByNamePattern :many -SELECT * FROM authors WHERE name LIKE COALESCE(sqlc.narg('name_pattern'), '%'); +SELECT * FROM authors +WHERE name LIKE COALESCE(sqlc.narg('name_pattern'), '%'); -- name: UpdateAuthors :execrows -UPDATE authors +UPDATE authors SET bio = ? WHERE bio IS NOT NULL; @@ -28,31 +32,41 @@ SELECT * FROM authors WHERE id IN (sqlc.slice('ids')); SELECT * FROM authors WHERE id IN (sqlc.slice('ids')) AND name IN (sqlc.slice('names')); -- name: DeleteAuthor :exec -DELETE FROM authors WHERE name = ?; +DELETE FROM authors +WHERE name = ?; -- name: CreateBook :execlastid INSERT INTO books (name, author_id) VALUES (?, ?) RETURNING id; -- name: ListAllAuthorsBooks :many -SELECT sqlc.embed(authors), sqlc.embed(books) -FROM authors JOIN books ON authors.id = books.author_id +SELECT + sqlc.embed(authors), + sqlc.embed(books) +FROM authors INNER JOIN books ON authors.id = books.author_id ORDER BY authors.name; -- name: GetDuplicateAuthors :many -SELECT sqlc.embed(authors1), sqlc.embed(authors2) -FROM authors authors1 JOIN authors authors2 ON authors1.name = authors2.name +SELECT + sqlc.embed(authors1), + sqlc.embed(authors2) +FROM authors AS authors1 +INNER JOIN authors AS authors2 ON authors1.name = authors2.name WHERE authors1.id < authors2.id; -- name: GetAuthorsByBookName :many -SELECT authors.*, sqlc.embed(books) -FROM authors JOIN books ON authors.id = books.author_id +SELECT + authors.*, + sqlc.embed(books) +FROM authors INNER JOIN books ON authors.id = books.author_id WHERE books.name = ?; -- name: DeleteAllAuthors :exec DELETE FROM authors; -- name: InsertSqliteTypes :exec -INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES (?, ?, ?, ?); +INSERT INTO types_sqlite (c_integer, c_real, c_text, c_blob) VALUES ( + ?, ?, ?, ? +); -- name: InsertSqliteTypesBatch :copyfrom INSERT INTO types_sqlite (c_integer, c_real, c_text) VALUES (?, ?, ?); @@ -61,14 +75,22 @@ INSERT INTO types_sqlite (c_integer, c_real, c_text) VALUES (?, ?, ?); SELECT * FROM types_sqlite LIMIT 1; -- name: GetSqliteTypesCnt :one -SELECT COUNT(1) AS cnt , c_integer, c_real, c_text, c_blob +SELECT + c_integer, + c_real, + c_text, + c_blob, + COUNT(*) AS cnt FROM types_sqlite GROUP BY c_integer, c_real, c_text, c_blob LIMIT 1; -- name: GetSqliteFunctions :one -SELECT MAX(c_integer) AS max_integer, MAX(c_real) AS max_real, MAX(c_text) AS max_text +SELECT + MAX(c_integer) AS max_integer, + MAX(c_real) AS max_real, + MAX(c_text) AS max_text FROM types_sqlite; -- name: DeleteAllSqliteTypes :exec -DELETE FROM types_sqlite; \ No newline at end of file +DELETE FROM types_sqlite; diff --git a/examples/config/sqlite/schema.sql b/examples/config/sqlite/schema.sql index 96eec4bc..1e4e85eb 100644 --- a/examples/config/sqlite/schema.sql +++ b/examples/config/sqlite/schema.sql @@ -1,20 +1,20 @@ CREATE TABLE authors ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - bio TEXT + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + bio TEXT ); CREATE TABLE books ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - author_id INTEGER NOT NULL, - description TEXT, + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + author_id INTEGER NOT NULL, + description TEXT, FOREIGN KEY (author_id) REFERENCES authors (id) ON DELETE CASCADE ); CREATE TABLE types_sqlite ( - c_integer INTEGER, - c_real REAL, - c_text TEXT, - c_blob BLOB + c_integer INTEGER, + c_real REAL, + c_text TEXT, + c_blob BLOB ); From b181f669ee5eab5b981442dad5dc74ffed168fbd Mon Sep 17 00:00:00 2001 From: Ilan Uzan Date: Wed, 2 Jul 2025 20:41:13 +0200 Subject: [PATCH 08/11] fix: sqlc-fluff pre-commit fix --- .sqlfluff | 5 ++++- examples/config/mysql/query.sql | 9 ++++++--- examples/config/mysql/schema.sql | 16 ++++++++-------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.sqlfluff b/.sqlfluff index 3937becf..87b6f0ae 100644 --- a/.sqlfluff +++ b/.sqlfluff @@ -1,9 +1,12 @@ [sqlfluff] -exclude_rules = LT14,LT01,LT02,LT05,LT09,AM04,AL03,RF02,RF04,AM05,AL01,ST06,CV04,CP01,CP03 +exclude_rules = AM04,AL03,RF02,RF04,AM05,AL01,ST06 dialect = ansi [sqlfluff:rules] +[sqlfluff:rules:LT02] +capitalisation_policy = upper + [sqlfluff:paths:examples/config/postgresql/] dialect = postgres diff --git a/examples/config/mysql/query.sql b/examples/config/mysql/query.sql index e6787cbc..8c3682f1 100644 --- a/examples/config/mysql/query.sql +++ b/examples/config/mysql/query.sql @@ -2,7 +2,8 @@ SELECT * FROM authors WHERE name = ? LIMIT 1; -- name: ListAuthors :many -SELECT * FROM authors ORDER BY name; +SELECT * FROM authors +ORDER BY name; -- name: CreateAuthor :exec INSERT INTO authors (id, name, bio) VALUES (?, ?, ?); @@ -14,10 +15,12 @@ INSERT INTO authors (name, bio) VALUES (?, ?); SELECT * FROM authors WHERE id = ? LIMIT 1; -- name: GetAuthorByNamePattern :many -SELECT * FROM authors WHERE name LIKE COALESCE(sqlc.narg('name_pattern'), '%'); +SELECT * FROM authors +WHERE name LIKE COALESCE(sqlc.narg('name_pattern'), '%'); -- name: DeleteAuthor :exec -DELETE FROM authors WHERE name = ?; +DELETE FROM authors +WHERE name = ?; -- name: DeleteAllAuthors :exec DELETE FROM authors; diff --git a/examples/config/mysql/schema.sql b/examples/config/mysql/schema.sql index 8f9ca6d5..56fd99fa 100644 --- a/examples/config/mysql/schema.sql +++ b/examples/config/mysql/schema.sql @@ -1,15 +1,15 @@ CREATE TABLE authors ( - id BIGINT PRIMARY KEY AUTO_INCREMENT, - name TEXT NOT NULL, - bio TEXT + id BIGINT PRIMARY KEY AUTO_INCREMENT, + name TEXT NOT NULL, + bio TEXT ); CREATE TABLE books ( - id BIGINT PRIMARY KEY AUTO_INCREMENT, - name TEXT NOT NULL, - author_id BIGINT NOT NULL, - description TEXT, - FOREIGN KEY (author_id) REFERENCES authors (id) ON DELETE CASCADE + id BIGINT PRIMARY KEY AUTO_INCREMENT, + name TEXT NOT NULL, + author_id BIGINT NOT NULL, + description TEXT, + FOREIGN KEY (author_id) REFERENCES authors (id) ON DELETE CASCADE ); CREATE TABLE mysql_types ( From e0497a9f60b861f5f070ad57b24a1f93dada41d1 Mon Sep 17 00:00:00 2001 From: Ilan Uzan Date: Wed, 2 Jul 2025 20:42:37 +0200 Subject: [PATCH 09/11] fix: generated files --- examples/MySqlConnectorDapperExample/QuerySql.cs | 6 +++--- examples/MySqlConnectorDapperExample/request.json | 6 +++--- examples/MySqlConnectorDapperLegacyExample/QuerySql.cs | 6 +++--- examples/MySqlConnectorDapperLegacyExample/request.json | 6 +++--- examples/MySqlConnectorExample/QuerySql.cs | 6 +++--- examples/MySqlConnectorExample/request.json | 6 +++--- examples/MySqlConnectorLegacyExample/QuerySql.cs | 6 +++--- examples/MySqlConnectorLegacyExample/request.json | 6 +++--- 8 files changed, 24 insertions(+), 24 deletions(-) diff --git a/examples/MySqlConnectorDapperExample/QuerySql.cs b/examples/MySqlConnectorDapperExample/QuerySql.cs index 9cea294e..fe20c9f0 100644 --- a/examples/MySqlConnectorDapperExample/QuerySql.cs +++ b/examples/MySqlConnectorDapperExample/QuerySql.cs @@ -49,7 +49,7 @@ public class GetAuthorArgs } } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name; SELECT LAST_INSERT_ID()"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name ; SELECT LAST_INSERT_ID ( ) "; public class ListAuthorsRow { public required long Id { get; init; } @@ -123,7 +123,7 @@ public class GetAuthorByIdArgs } } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%'); SELECT LAST_INSERT_ID()"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) ; SELECT LAST_INSERT_ID ( ) "; public class GetAuthorByNamePatternRow { public required long Id { get; init; } @@ -145,7 +145,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name; SELECT LAST_INSERT_ID()"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name ; SELECT LAST_INSERT_ID ( ) "; public class DeleteAuthorArgs { public required string Name { get; init; } diff --git a/examples/MySqlConnectorDapperExample/request.json b/examples/MySqlConnectorDapperExample/request.json index 552a3a2b..22c8a7db 100644 --- a/examples/MySqlConnectorDapperExample/request.json +++ b/examples/MySqlConnectorDapperExample/request.json @@ -609,7 +609,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -812,7 +812,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(?, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE(?, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -872,7 +872,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = ?", + "text": "DELETE FROM authors\nWHERE name = ?", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ diff --git a/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs b/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs index 62444c8b..5165c5af 100644 --- a/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs +++ b/examples/MySqlConnectorDapperLegacyExample/QuerySql.cs @@ -50,7 +50,7 @@ public async Task GetAuthor(GetAuthorArgs args) } } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name; SELECT LAST_INSERT_ID()"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name ; SELECT LAST_INSERT_ID ( ) "; public class ListAuthorsRow { public long Id { get; set; } @@ -124,7 +124,7 @@ public async Task GetAuthorById(GetAuthorByIdArgs args) } } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%'); SELECT LAST_INSERT_ID()"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) ; SELECT LAST_INSERT_ID ( ) "; public class GetAuthorByNamePatternRow { public long Id { get; set; } @@ -146,7 +146,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name; SELECT LAST_INSERT_ID()"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name ; SELECT LAST_INSERT_ID ( ) "; public class DeleteAuthorArgs { public string Name { get; set; } diff --git a/examples/MySqlConnectorDapperLegacyExample/request.json b/examples/MySqlConnectorDapperLegacyExample/request.json index c49c73ac..0472d073 100644 --- a/examples/MySqlConnectorDapperLegacyExample/request.json +++ b/examples/MySqlConnectorDapperLegacyExample/request.json @@ -609,7 +609,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -812,7 +812,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(?, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE(?, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -872,7 +872,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = ?", + "text": "DELETE FROM authors\nWHERE name = ?", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ diff --git a/examples/MySqlConnectorExample/QuerySql.cs b/examples/MySqlConnectorExample/QuerySql.cs index 61f93606..1a5a7a27 100644 --- a/examples/MySqlConnectorExample/QuerySql.cs +++ b/examples/MySqlConnectorExample/QuerySql.cs @@ -54,7 +54,7 @@ public QuerySql(string connectionString) return null; } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name "; public readonly record struct ListAuthorsRow(long Id, string Name, string? Bio); public async Task> ListAuthors() { @@ -140,7 +140,7 @@ public async Task CreateAuthorReturnId(CreateAuthorReturnIdArgs args) return null; } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%')"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) "; public readonly record struct GetAuthorByNamePatternRow(long Id, string Name, string? Bio); public readonly record struct GetAuthorByNamePatternArgs(string? NamePattern); public async Task> GetAuthorByNamePattern(GetAuthorByNamePatternArgs args) @@ -165,7 +165,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name "; public readonly record struct DeleteAuthorArgs(string Name); public async Task DeleteAuthor(DeleteAuthorArgs args) { diff --git a/examples/MySqlConnectorExample/request.json b/examples/MySqlConnectorExample/request.json index c55fb2c4..ab760399 100644 --- a/examples/MySqlConnectorExample/request.json +++ b/examples/MySqlConnectorExample/request.json @@ -609,7 +609,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -812,7 +812,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(?, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE(?, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -872,7 +872,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = ?", + "text": "DELETE FROM authors\nWHERE name = ?", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ diff --git a/examples/MySqlConnectorLegacyExample/QuerySql.cs b/examples/MySqlConnectorLegacyExample/QuerySql.cs index 149156b2..b0119b74 100644 --- a/examples/MySqlConnectorLegacyExample/QuerySql.cs +++ b/examples/MySqlConnectorLegacyExample/QuerySql.cs @@ -63,7 +63,7 @@ public async Task GetAuthor(GetAuthorArgs args) return null; } - private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name"; + private const string ListAuthorsSql = "SELECT id, name, bio FROM authors ORDER BY name "; public class ListAuthorsRow { public long Id { get; set; } @@ -171,7 +171,7 @@ public async Task GetAuthorById(GetAuthorByIdArgs args) return null; } - private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(@name_pattern, '%')"; + private const string GetAuthorByNamePatternSql = "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE ( @name_pattern , '%' ) "; public class GetAuthorByNamePatternRow { public long Id { get; set; } @@ -204,7 +204,7 @@ public async Task> GetAuthorByNamePattern(GetAut } } - private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name"; + private const string DeleteAuthorSql = "DELETE FROM authors WHERE name = @name "; public class DeleteAuthorArgs { public string Name { get; set; } diff --git a/examples/MySqlConnectorLegacyExample/request.json b/examples/MySqlConnectorLegacyExample/request.json index b6a14bd5..a5075cff 100644 --- a/examples/MySqlConnectorLegacyExample/request.json +++ b/examples/MySqlConnectorLegacyExample/request.json @@ -609,7 +609,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors ORDER BY name", + "text": "SELECT id, name, bio FROM authors\nORDER BY name", "name": "ListAuthors", "cmd": ":many", "columns": [ @@ -812,7 +812,7 @@ "filename": "query.sql" }, { - "text": "SELECT id, name, bio FROM authors WHERE name LIKE COALESCE(?, '%')", + "text": "SELECT id, name, bio FROM authors\nWHERE name LIKE COALESCE(?, '%')", "name": "GetAuthorByNamePattern", "cmd": ":many", "columns": [ @@ -872,7 +872,7 @@ "filename": "query.sql" }, { - "text": "DELETE FROM authors WHERE name = ?", + "text": "DELETE FROM authors\nWHERE name = ?", "name": "DeleteAuthor", "cmd": ":exec", "parameters": [ From 6c664d9d2e93412cfcfa0c0e7d9b66a5a7cb9a1d Mon Sep 17 00:00:00 2001 From: Ilan Uzan Date: Wed, 2 Jul 2025 21:16:44 +0200 Subject: [PATCH 10/11] fix: README to include new option --- README.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 063168ae..ebc646f7 100644 --- a/README.md +++ b/README.md @@ -39,14 +39,15 @@ sql: ``` # Usage ## Options -| Option | Possible values | Optional | Info | -|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| overrideDriverVersion | default:
`2.3.6` for MySqlConnector (mysql)
`8.0.3` for Npgsql (postgresql)
`8.0.10` for Microsoft.Data.Sqlite (sqlite)

values: The desired driver version | Yes | Allows you to override the version of DB driver to be used. | -| targetFramework | default: `net8.0`
values: `netstandard2.0`, `netstandard2.1`, `net8.0` | Yes | Determines the target framework for your generated code, meaning the generated code will be compiled to the specified runtime.
For more information and help deciding on the right value, refer to the [Microsoft .NET Standard documentation](https://learn.microsoft.com/en-us/dotnet/standard/net-standard?tabs=net-standard-1-0). | -| generateCsproj | default: `true`
values: `false`,`true` | Yes | Assists you with the integration of SQLC and csharp by generating a `.csproj` file. This converts the generated output to a .dll, a project that you can easily incorporate into your build process. | -| namespaceName | default: the generated project name | Yes | Allows you to override the namespace name to be different than the project name | -| useDapper | default: `false`
values: `false`,`true` | Yes | Enables Dapper as a thin wrapper for the generated code. For more information, please refer to the [Dapper documentation](https://github.com/DapperLib/Dapper). | -| overrideDapperVersion | default:
`2.1.35`
values: The desired Dapper version | Yes | If `useDapper` is set to `true`, this option allows you to override the version of Dapper to be used. | +| Option | Possible values | Optional | Info | +|--------------------- |----------------------------------------------------------------------------------------------|----------|------| +| overrideDriverVersion| default:
`2.3.6` for MySqlConnector (mysql)
`8.0.3` for Npgsql (postgresql)
`8.0.10` for Microsoft.Data.Sqlite (sqlite)

values: The desired driver version | Yes | Allows you to override the version of DB driver to be used. | +| targetFramework | default: `net8.0`
values: `netstandard2.0`, `netstandard2.1`, `net8.0` | Yes | Determines the target framework for your generated code, meaning the generated code will be compiled to the specified runtime.
For more information and help deciding on the right value, refer to the [Microsoft .NET Standard documentation](https://learn.microsoft.com/en-us/dotnet/standard/net-standard?tabs=net-standard-1-0). | +| generateCsproj | default: `true`
values: `false`,`true` | Yes | Assists you with the integration of SQLC and csharp by generating a `.csproj` file. This converts the generated output to a .dll, a project that you can easily incorporate into your build process. | +| namespaceName | default: the generated project name | Yes | Allows you to override the namespace name to be different than the project name | +| useDapper | default: `false`
values: `false`,`true` | Yes | Enables Dapper as a thin wrapper for the generated code. For more information, please refer to the [Dapper documentation](https://github.com/DapperLib/Dapper). | +| overrideDapperVersion| default:
`2.1.35`
values: The desired Dapper version | Yes | If `useDapper` is set to `true`, this option allows you to override the version of Dapper to be used. | +| Override | values: N/A | Yes | Allows you to override the generated C# data types for specific columns in specific queries. This option accepts a `query_name:column_name` mapping and the overriden data type. | ## Supported Features - ✅ means the feature is fully supported. From c5fd15a43ba4bf98f126a9c97bf67b1d0452cc05 Mon Sep 17 00:00:00 2001 From: Ilan Uzan Date: Wed, 2 Jul 2025 21:24:22 +0200 Subject: [PATCH 11/11] fix: document override option --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ebc646f7..13702d92 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,17 @@ sql: | namespaceName | default: the generated project name | Yes | Allows you to override the namespace name to be different than the project name | | useDapper | default: `false`
values: `false`,`true` | Yes | Enables Dapper as a thin wrapper for the generated code. For more information, please refer to the [Dapper documentation](https://github.com/DapperLib/Dapper). | | overrideDapperVersion| default:
`2.1.35`
values: The desired Dapper version | Yes | If `useDapper` is set to `true`, this option allows you to override the version of Dapper to be used. | -| Override | values: N/A | Yes | Allows you to override the generated C# data types for specific columns in specific queries. This option accepts a `query_name:column_name` mapping and the overriden data type. | +| Override | values: A nested override value like [this](#override-option). | Yes | Allows you to override the generated C# data types for specific columns in specific queries. This option accepts a `query_name:column_name` mapping and the overriden data type. | + +### Override option +``` +yaml +overrides: + - column: ":" + csharp_type: + type: "" + notNull: true|false +``` ## Supported Features - ✅ means the feature is fully supported.