diff --git a/Drivers/SqliteDriver.cs b/Drivers/SqliteDriver.cs index 70c4b6fd..e13a7775 100644 --- a/Drivers/SqliteDriver.cs +++ b/Drivers/SqliteDriver.cs @@ -27,14 +27,14 @@ public sealed partial class SqliteDriver( { {"blob", new()} }, - readerFn: (ordinal, _) => $"reader.GetFieldValue({ordinal})" + readerFn: (ordinal, _) => $"{Variable.Reader.AsVarName()}.GetFieldValue({ordinal})" ), ["string"] = new( new() { {"text", new()} }, - readerFn: (ordinal, _) => $"reader.GetString({ordinal})" + readerFn: (ordinal, _) => $"{Variable.Reader.AsVarName()}.GetString({ordinal})" ), ["int"] = new( new() @@ -42,7 +42,7 @@ public sealed partial class SqliteDriver( { "integer", new() }, { "integernotnulldefaultunixepoch", new() } }, - readerFn: (ordinal, _) => $"reader.GetInt32({ordinal})", + readerFn: (ordinal, _) => $"{Variable.Reader.AsVarName()}.GetInt32({ordinal})", convertFunc: x => $"Convert.ToInt32({x})" ), ["decimal"] = new( @@ -50,15 +50,15 @@ public sealed partial class SqliteDriver( { {"real", new()} }, - readerFn: (ordinal, _) => $"reader.GetDecimal({ordinal})" + readerFn: (ordinal, _) => $"{Variable.Reader.AsVarName()}.GetDecimal({ordinal})" ), ["DateTime"] = new( [], readerFn: (ordinal, dbType) => { - if (IntegerDbTypes.Contains(dbType)) - return $"DateTime.UnixEpoch.AddSeconds(reader.GetInt32({ordinal}))"; - return $"DateTime.Parse(reader.GetString({ordinal}))"; + if (IntegerDbTypes.Contains(dbType.ToLower())) + return $"DateTimeOffset.FromUnixTimeSeconds({Variable.Reader.AsVarName()}.GetInt32({ordinal})).DateTime"; + return $"DateTime.Parse({Variable.Reader.AsVarName()}.GetString({ordinal}))"; }, writerFn: (el, dbType, notNull, isDapper, isLegacy) => { @@ -67,6 +67,23 @@ public sealed partial class SqliteDriver( if (IntegerDbTypes.Contains(dbType.ToLower())) return $"{el} != null ? (int?) new DateTimeOffset({elWithOptionalNull}.ToUniversalTime()).ToUnixTimeSeconds() : {nullValue}"; return $"{el} != null ? {elWithOptionalNull}.ToString(\"{DateTimeStringFormat}\") : {nullValue}"; + }, + sqlMapper: "SqlMapper.AddTypeHandler(typeof(DateTime), new DateTimeTypeHandler());", + sqlMapperImpl: DateTimeTypeHandler + ), + ["bool"] = new( + [], + readerFn: (ordinal, dbType) => + { + var getFunc = IntegerDbTypes.Contains(dbType.ToLower()) ? "GetInt32" : "GetString"; + return $"Convert.ToBoolean({Variable.Reader.AsVarName()}.{getFunc}({ordinal}))"; + }, + writerFn: (el, dbType, notNull, isDapper, isLegacy) => + { + var nullValue = isDapper ? "null" : "(object)DBNull.Value"; + var optionalCast = notNull ? string.Empty : "(int?)"; + var convertFunc = IntegerDbTypes.Contains(dbType.ToLower()) ? $"{optionalCast} Convert.ToInt32" : "Convert.ToString"; + return $"{el} != null ? {convertFunc}({el}) : {nullValue}"; } ), ["object"] = new( @@ -74,10 +91,29 @@ public sealed partial class SqliteDriver( { { "any", new() } }, - readerFn: (ordinal, _) => $"reader.GetValue({ordinal})" + readerFn: (ordinal, _) => $"{Variable.Reader.AsVarName()}.GetValue({ordinal})" ) }; + private static readonly SqlMapperImplFunc DateTimeTypeHandler = _ => $$""" + private class DateTimeTypeHandler : SqlMapper.TypeHandler + { + public override DateTime Parse(object value) + { + if (value is string s) + return DateTime.Parse(s); + if (value is long l) + return DateTimeOffset.FromUnixTimeSeconds(l).DateTime; + throw new DataException($"Cannot convert {value?.GetType()} to DateTime"); + } + + public override void SetValue(IDbDataParameter parameter, DateTime value) + { + parameter.Value = value; + } + } + """; + public override string TransactionClassName => "SqliteTransaction"; public override ISet GetUsingDirectivesForQueries() diff --git a/end2end/EndToEndScaffold/Templates/SqliteTests.cs b/end2end/EndToEndScaffold/Templates/SqliteTests.cs index fa133a5b..a6f6713f 100644 --- a/end2end/EndToEndScaffold/Templates/SqliteTests.cs +++ b/end2end/EndToEndScaffold/Templates/SqliteTests.cs @@ -10,25 +10,32 @@ public static class SqliteTests { Impl = $$""" [Test] - [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 }, "2020-01-01 14:15:16", "2025-01-01 17:18:19")] - [TestCase(null, null, null, new byte[] { }, null, null)] - [TestCase(null, null, null, null, null, null)] + [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 }, true, false, "2020-01-01 14:15:16", "2025-01-01 17:18:19")] + [TestCase(null, null, null, new byte[] { }, null, null, null, null)] + [TestCase(null, null, null, null, null, null, null, null)] public async Task TestSqliteTypes( int? cInteger, decimal? cReal, string cText, byte[] cBlob, - DateTime cTextDatetimeOverride, + bool? cTextBoolOverride, + bool? cIntegerBoolOverride, + DateTime? cTextDatetimeOverride, DateTime? cIntegerDatetimeOverride) { + if (cTextDatetimeOverride.HasValue && cTextDatetimeOverride.Value.Kind != DateTimeKind.Utc) + cTextDatetimeOverride = DateTime.SpecifyKind(cTextDatetimeOverride.Value, DateTimeKind.Utc); if (cIntegerDatetimeOverride.HasValue && cIntegerDatetimeOverride.Value.Kind != DateTimeKind.Utc) - cIntegerDatetimeOverride = DateTime.SpecifyKind(cTextDatetimeOverride, DateTimeKind.Utc); + cIntegerDatetimeOverride = DateTime.SpecifyKind(cIntegerDatetimeOverride.Value, DateTimeKind.Utc); + await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, + CTextBoolOverride = cTextBoolOverride, + CIntegerBoolOverride = cIntegerBoolOverride, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }); @@ -39,6 +46,8 @@ await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs CReal = cReal, CText = cText, CBlob = cBlob, + CTextBoolOverride = cTextBoolOverride, + CIntegerBoolOverride = cIntegerBoolOverride, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }; @@ -51,6 +60,8 @@ void AssertSingularEquals(QuerySql.GetSqliteTypesRow x, QuerySql.GetSqliteTypesR Assert.That(x.CReal, Is.EqualTo(y.CReal)); Assert.That(x.CText, Is.EqualTo(y.CText)); Assert.That(x.CBlob, Is.EqualTo(y.CBlob)); + Assert.That(x.CTextBoolOverride, Is.EqualTo(y.CTextBoolOverride)); + Assert.That(x.CIntegerBoolOverride, Is.EqualTo(y.CIntegerBoolOverride)); AssertDateTimeEquals(x.CTextDatetimeOverride, y.CTextDatetimeOverride); AssertDateTimeEquals(x.CIntegerDatetimeOverride, y.CIntegerDatetimeOverride); } diff --git a/end2end/EndToEndTests/SqliteDapperTester.generated.cs b/end2end/EndToEndTests/SqliteDapperTester.generated.cs index 61967536..6c300290 100644 --- a/end2end/EndToEndTests/SqliteDapperTester.generated.cs +++ b/end2end/EndToEndTests/SqliteDapperTester.generated.cs @@ -328,20 +328,24 @@ void AssertSingularEquals(QuerySql.GetAuthorByNamePatternRow x, QuerySql.GetAuth } [Test] - [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 }, "2020-01-01 14:15:16", "2025-01-01 17:18:19")] - [TestCase(null, null, null, new byte[] { }, null, null)] - [TestCase(null, null, null, null, null, null)] - public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob, DateTime cTextDatetimeOverride, DateTime? cIntegerDatetimeOverride) + [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 }, true, false, "2020-01-01 14:15:16", "2025-01-01 17:18:19")] + [TestCase(null, null, null, new byte[] { }, null, null, null, null)] + [TestCase(null, null, null, null, null, null, null, null)] + public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob, bool? cTextBoolOverride, bool? cIntegerBoolOverride, DateTime? cTextDatetimeOverride, DateTime? cIntegerDatetimeOverride) { + if (cTextDatetimeOverride.HasValue && cTextDatetimeOverride.Value.Kind != DateTimeKind.Utc) + cTextDatetimeOverride = DateTime.SpecifyKind(cTextDatetimeOverride.Value, DateTimeKind.Utc); if (cIntegerDatetimeOverride.HasValue && cIntegerDatetimeOverride.Value.Kind != DateTimeKind.Utc) - cIntegerDatetimeOverride = DateTime.SpecifyKind(cTextDatetimeOverride, DateTimeKind.Utc); - await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }); + cIntegerDatetimeOverride = DateTime.SpecifyKind(cIntegerDatetimeOverride.Value, DateTimeKind.Utc); + await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, CTextBoolOverride = cTextBoolOverride, CIntegerBoolOverride = cIntegerBoolOverride, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }); var expected = new QuerySql.GetSqliteTypesRow { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, + CTextBoolOverride = cTextBoolOverride, + CIntegerBoolOverride = cIntegerBoolOverride, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }; @@ -353,6 +357,8 @@ void AssertSingularEquals(QuerySql.GetSqliteTypesRow x, QuerySql.GetSqliteTypesR Assert.That(x.CReal, Is.EqualTo(y.CReal)); Assert.That(x.CText, Is.EqualTo(y.CText)); Assert.That(x.CBlob, Is.EqualTo(y.CBlob)); + Assert.That(x.CTextBoolOverride, Is.EqualTo(y.CTextBoolOverride)); + Assert.That(x.CIntegerBoolOverride, Is.EqualTo(y.CIntegerBoolOverride)); AssertDateTimeEquals(x.CTextDatetimeOverride, y.CTextDatetimeOverride); AssertDateTimeEquals(x.CIntegerDatetimeOverride, y.CIntegerDatetimeOverride); } diff --git a/end2end/EndToEndTests/SqliteTester.generated.cs b/end2end/EndToEndTests/SqliteTester.generated.cs index 17aec6f6..f3cc01ba 100644 --- a/end2end/EndToEndTests/SqliteTester.generated.cs +++ b/end2end/EndToEndTests/SqliteTester.generated.cs @@ -328,20 +328,24 @@ void AssertSingularEquals(QuerySql.GetAuthorByNamePatternRow x, QuerySql.GetAuth } [Test] - [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 }, "2020-01-01 14:15:16", "2025-01-01 17:18:19")] - [TestCase(null, null, null, new byte[] { }, null, null)] - [TestCase(null, null, null, null, null, null)] - public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob, DateTime cTextDatetimeOverride, DateTime? cIntegerDatetimeOverride) + [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 }, true, false, "2020-01-01 14:15:16", "2025-01-01 17:18:19")] + [TestCase(null, null, null, new byte[] { }, null, null, null, null)] + [TestCase(null, null, null, null, null, null, null, null)] + public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob, bool? cTextBoolOverride, bool? cIntegerBoolOverride, DateTime? cTextDatetimeOverride, DateTime? cIntegerDatetimeOverride) { + if (cTextDatetimeOverride.HasValue && cTextDatetimeOverride.Value.Kind != DateTimeKind.Utc) + cTextDatetimeOverride = DateTime.SpecifyKind(cTextDatetimeOverride.Value, DateTimeKind.Utc); if (cIntegerDatetimeOverride.HasValue && cIntegerDatetimeOverride.Value.Kind != DateTimeKind.Utc) - cIntegerDatetimeOverride = DateTime.SpecifyKind(cTextDatetimeOverride, DateTimeKind.Utc); - await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }); + cIntegerDatetimeOverride = DateTime.SpecifyKind(cIntegerDatetimeOverride.Value, DateTimeKind.Utc); + await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, CTextBoolOverride = cTextBoolOverride, CIntegerBoolOverride = cIntegerBoolOverride, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }); var expected = new QuerySql.GetSqliteTypesRow { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, + CTextBoolOverride = cTextBoolOverride, + CIntegerBoolOverride = cIntegerBoolOverride, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }; @@ -353,6 +357,8 @@ void AssertSingularEquals(QuerySql.GetSqliteTypesRow x, QuerySql.GetSqliteTypesR Assert.That(x.CReal, Is.EqualTo(y.CReal)); Assert.That(x.CText, Is.EqualTo(y.CText)); Assert.That(x.CBlob, Is.EqualTo(y.CBlob)); + Assert.That(x.CTextBoolOverride, Is.EqualTo(y.CTextBoolOverride)); + Assert.That(x.CIntegerBoolOverride, Is.EqualTo(y.CIntegerBoolOverride)); AssertDateTimeEquals(x.CTextDatetimeOverride, y.CTextDatetimeOverride); AssertDateTimeEquals(x.CIntegerDatetimeOverride, y.CIntegerDatetimeOverride); } diff --git a/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs b/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs index 586de9df..b0956df6 100644 --- a/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/SqliteDapperTester.generated.cs @@ -328,20 +328,24 @@ void AssertSingularEquals(QuerySql.GetAuthorByNamePatternRow x, QuerySql.GetAuth } [Test] - [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 }, "2020-01-01 14:15:16", "2025-01-01 17:18:19")] - [TestCase(null, null, null, new byte[] { }, null, null)] - [TestCase(null, null, null, null, null, null)] - public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob, DateTime cTextDatetimeOverride, DateTime? cIntegerDatetimeOverride) + [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 }, true, false, "2020-01-01 14:15:16", "2025-01-01 17:18:19")] + [TestCase(null, null, null, new byte[] { }, null, null, null, null)] + [TestCase(null, null, null, null, null, null, null, null)] + public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob, bool? cTextBoolOverride, bool? cIntegerBoolOverride, DateTime? cTextDatetimeOverride, DateTime? cIntegerDatetimeOverride) { + if (cTextDatetimeOverride.HasValue && cTextDatetimeOverride.Value.Kind != DateTimeKind.Utc) + cTextDatetimeOverride = DateTime.SpecifyKind(cTextDatetimeOverride.Value, DateTimeKind.Utc); if (cIntegerDatetimeOverride.HasValue && cIntegerDatetimeOverride.Value.Kind != DateTimeKind.Utc) - cIntegerDatetimeOverride = DateTime.SpecifyKind(cTextDatetimeOverride, DateTimeKind.Utc); - await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }); + cIntegerDatetimeOverride = DateTime.SpecifyKind(cIntegerDatetimeOverride.Value, DateTimeKind.Utc); + await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, CTextBoolOverride = cTextBoolOverride, CIntegerBoolOverride = cIntegerBoolOverride, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }); var expected = new QuerySql.GetSqliteTypesRow { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, + CTextBoolOverride = cTextBoolOverride, + CIntegerBoolOverride = cIntegerBoolOverride, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }; @@ -353,6 +357,8 @@ void AssertSingularEquals(QuerySql.GetSqliteTypesRow x, QuerySql.GetSqliteTypesR Assert.That(x.CReal, Is.EqualTo(y.CReal)); Assert.That(x.CText, Is.EqualTo(y.CText)); Assert.That(x.CBlob, Is.EqualTo(y.CBlob)); + Assert.That(x.CTextBoolOverride, Is.EqualTo(y.CTextBoolOverride)); + Assert.That(x.CIntegerBoolOverride, Is.EqualTo(y.CIntegerBoolOverride)); AssertDateTimeEquals(x.CTextDatetimeOverride, y.CTextDatetimeOverride); AssertDateTimeEquals(x.CIntegerDatetimeOverride, y.CIntegerDatetimeOverride); } diff --git a/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs b/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs index 0a16b355..c50edf9f 100644 --- a/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs +++ b/end2end/EndToEndTestsLegacy/SqliteTester.generated.cs @@ -328,20 +328,24 @@ void AssertSingularEquals(QuerySql.GetAuthorByNamePatternRow x, QuerySql.GetAuth } [Test] - [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 }, "2020-01-01 14:15:16", "2025-01-01 17:18:19")] - [TestCase(null, null, null, new byte[] { }, null, null)] - [TestCase(null, null, null, null, null, null)] - public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob, DateTime cTextDatetimeOverride, DateTime? cIntegerDatetimeOverride) + [TestCase(-54355, 9787.66, "Songs of Love and Hate", new byte[] { 0x15, 0x20, 0x33 }, true, false, "2020-01-01 14:15:16", "2025-01-01 17:18:19")] + [TestCase(null, null, null, new byte[] { }, null, null, null, null)] + [TestCase(null, null, null, null, null, null, null, null)] + public async Task TestSqliteTypes(int? cInteger, decimal? cReal, string cText, byte[] cBlob, bool? cTextBoolOverride, bool? cIntegerBoolOverride, DateTime? cTextDatetimeOverride, DateTime? cIntegerDatetimeOverride) { + if (cTextDatetimeOverride.HasValue && cTextDatetimeOverride.Value.Kind != DateTimeKind.Utc) + cTextDatetimeOverride = DateTime.SpecifyKind(cTextDatetimeOverride.Value, DateTimeKind.Utc); if (cIntegerDatetimeOverride.HasValue && cIntegerDatetimeOverride.Value.Kind != DateTimeKind.Utc) - cIntegerDatetimeOverride = DateTime.SpecifyKind(cTextDatetimeOverride, DateTimeKind.Utc); - await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }); + cIntegerDatetimeOverride = DateTime.SpecifyKind(cIntegerDatetimeOverride.Value, DateTimeKind.Utc); + await QuerySql.InsertSqliteTypes(new QuerySql.InsertSqliteTypesArgs { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, CTextBoolOverride = cTextBoolOverride, CIntegerBoolOverride = cIntegerBoolOverride, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }); var expected = new QuerySql.GetSqliteTypesRow { CInteger = cInteger, CReal = cReal, CText = cText, CBlob = cBlob, + CTextBoolOverride = cTextBoolOverride, + CIntegerBoolOverride = cIntegerBoolOverride, CTextDatetimeOverride = cTextDatetimeOverride, CIntegerDatetimeOverride = cIntegerDatetimeOverride }; @@ -353,6 +357,8 @@ void AssertSingularEquals(QuerySql.GetSqliteTypesRow x, QuerySql.GetSqliteTypesR Assert.That(x.CReal, Is.EqualTo(y.CReal)); Assert.That(x.CText, Is.EqualTo(y.CText)); Assert.That(x.CBlob, Is.EqualTo(y.CBlob)); + Assert.That(x.CTextBoolOverride, Is.EqualTo(y.CTextBoolOverride)); + Assert.That(x.CIntegerBoolOverride, Is.EqualTo(y.CIntegerBoolOverride)); AssertDateTimeEquals(x.CTextDatetimeOverride, y.CTextDatetimeOverride); AssertDateTimeEquals(x.CIntegerDatetimeOverride, y.CIntegerDatetimeOverride); } diff --git a/examples/SqliteDapperExample/Models.cs b/examples/SqliteDapperExample/Models.cs index 13186668..ce95a5a1 100644 --- a/examples/SqliteDapperExample/Models.cs +++ b/examples/SqliteDapperExample/Models.cs @@ -23,4 +23,6 @@ public class TypesSqlite public byte[]? CBlob { get; init; } public string? CTextDatetimeOverride { get; init; } public int? CIntegerDatetimeOverride { get; init; } + public string? CTextBoolOverride { get; init; } + public int? CIntegerBoolOverride { get; init; } }; \ No newline at end of file diff --git a/examples/SqliteDapperExample/QuerySql.cs b/examples/SqliteDapperExample/QuerySql.cs index fea7c104..7f936975 100644 --- a/examples/SqliteDapperExample/QuerySql.cs +++ b/examples/SqliteDapperExample/QuerySql.cs @@ -521,7 +521,7 @@ public async Task DeleteAllAuthors() await this.Transaction.Connection.ExecuteAsync(DeleteAllAuthorsSql, transaction: this.Transaction); } - private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite ( c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override ) VALUES (@c_integer, @c_real, @c_text, @c_blob, @c_text_datetime_override, @c_integer_datetime_override)"; + private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite ( c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override, c_text_bool_override, c_integer_bool_override ) VALUES (@c_integer, @c_real, @c_text, @c_blob, @c_text_datetime_override, @c_integer_datetime_override, @c_text_bool_override, @c_integer_bool_override)"; public class InsertSqliteTypesArgs { public int? CInteger { get; init; } @@ -530,6 +530,8 @@ public class InsertSqliteTypesArgs public byte[]? CBlob { get; init; } public DateTime? CTextDatetimeOverride { get; init; } public DateTime? CIntegerDatetimeOverride { get; init; } + public bool? CTextBoolOverride { get; init; } + public bool? CIntegerBoolOverride { get; init; } }; public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) { @@ -540,6 +542,8 @@ public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) queryParams.Add("c_blob", args.CBlob); queryParams.Add("c_text_datetime_override", args.CTextDatetimeOverride != null ? args.CTextDatetimeOverride.Value.ToString("yyyy-MM-dd HH:mm:ss") : null); queryParams.Add("c_integer_datetime_override", args.CIntegerDatetimeOverride != null ? (int? )new DateTimeOffset(args.CIntegerDatetimeOverride.Value.ToUniversalTime()).ToUnixTimeSeconds() : null); + queryParams.Add("c_text_bool_override", args.CTextBoolOverride != null ? Convert.ToString(args.CTextBoolOverride) : null); + queryParams.Add("c_integer_bool_override", args.CIntegerBoolOverride != null ? (int? )Convert.ToInt32(args.CIntegerBoolOverride) : null); if (this.Transaction == null) { using (var connection = new SqliteConnection(ConnectionString)) @@ -579,7 +583,7 @@ public async Task InsertSqliteTypesBatch(List args) } } - private const string GetSqliteTypesSql = "SELECT c_integer, c_real, c_text, c_blob, c_text_datetime_override, datetime(c_integer_datetime_override, 'unixepoch') AS c_integer_datetime_override FROM types_sqlite LIMIT 1"; + private const string GetSqliteTypesSql = "SELECT c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override, c_text_bool_override, c_integer_bool_override FROM types_sqlite LIMIT 1"; public class GetSqliteTypesRow { public int? CInteger { get; init; } @@ -588,6 +592,8 @@ public class GetSqliteTypesRow public byte[]? CBlob { get; init; } public DateTime? CTextDatetimeOverride { get; init; } public DateTime? CIntegerDatetimeOverride { get; init; } + public bool? CTextBoolOverride { get; init; } + public bool? CIntegerBoolOverride { get; init; } }; public async Task GetSqliteTypes() { @@ -634,7 +640,7 @@ public class GetSqliteTypesCntRow public class GetSqliteFunctionsRow { public int? MaxInteger { get; init; } - public required decimal MaxReal { get; init; } + public decimal? MaxReal { get; init; } public object? MaxText { get; init; } }; public async Task GetSqliteFunctions() diff --git a/examples/SqliteDapperExample/Utils.cs b/examples/SqliteDapperExample/Utils.cs index 552ea0c4..51bdcc1f 100644 --- a/examples/SqliteDapperExample/Utils.cs +++ b/examples/SqliteDapperExample/Utils.cs @@ -8,8 +8,26 @@ namespace SqliteDapperExampleGen; public static class Utils { + private class DateTimeTypeHandler : SqlMapper.TypeHandler + { + public override DateTime Parse(object value) + { + if (value is string s) + return DateTime.Parse(s); + if (value is long l) + return DateTimeOffset.FromUnixTimeSeconds(l).DateTime; + throw new DataException($"Cannot convert {value?.GetType()} to DateTime"); + } + + public override void SetValue(IDbDataParameter parameter, DateTime value) + { + parameter.Value = value; + } + } + public static void ConfigureSqlMapper() { + SqlMapper.AddTypeHandler(typeof(DateTime), new DateTimeTypeHandler()); } public static string TransformQueryForSliceArgs(string originalSql, int sliceSize, string paramName) diff --git a/examples/SqliteDapperExample/request.json b/examples/SqliteDapperExample/request.json index c6a11107..9980e088 100644 --- a/examples/SqliteDapperExample/request.json +++ b/examples/SqliteDapperExample/request.json @@ -13,7 +13,7 @@ "codegen": { "out": "examples/SqliteDapperExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJkZWNpbWFsIn19LHsiY29sdW1uIjoiKjpjX3RleHRfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6IkRhdGVUaW1lIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOnRydWV9", "process": { "cmd": "./dist/LocalRunner" } @@ -178,6 +178,26 @@ "type": { "name": "INTEGER" } + }, + { + "name": "c_text_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + } + }, + { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + } } ] } @@ -988,7 +1008,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO types_sqlite \n(\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override\n) \nVALUES (?, ?, ?, ?, ?, ?)", + "text": "INSERT INTO types_sqlite \n(\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override,\n c_text_bool_override,\n c_integer_bool_override\n) \nVALUES (?, ?, ?, ?, ?, ?, ?, ?)", "name": "InsertSqliteTypes", "cmd": ":exec", "parameters": [ @@ -1081,6 +1101,36 @@ }, "originalName": "c_integer_datetime_override" } + }, + { + "number": 7, + "column": { + "name": "c_text_bool_override", + "length": -1, + "table": { + "schema": "main", + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + }, + "originalName": "c_text_bool_override" + } + }, + { + "number": 8, + "column": { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "schema": "main", + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + }, + "originalName": "c_integer_bool_override" + } } ], "filename": "query.sql", @@ -1145,7 +1195,7 @@ } }, { - "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n datetime(c_integer_datetime_override, 'unixepoch')\n AS c_integer_datetime_override\nFROM types_sqlite\nLIMIT 1", + "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override,\n c_text_bool_override,\n c_integer_bool_override\nFROM types_sqlite\nLIMIT 1", "name": "GetSqliteTypes", "cmd": ":one", "columns": [ @@ -1207,10 +1257,35 @@ { "name": "c_integer_datetime_override", "length": -1, - "isFuncCall": true, + "table": { + "name": "types_sqlite" + }, "type": { - "name": "any" - } + "name": "INTEGER" + }, + "originalName": "c_integer_datetime_override" + }, + { + "name": "c_text_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + }, + "originalName": "c_text_bool_override" + }, + { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + }, + "originalName": "c_integer_bool_override" } ], "filename": "query.sql" @@ -1316,5 +1391,5 @@ } ], "sqlc_version": "v1.30.0", - "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwibmFtZXNwYWNlTmFtZSI6IlNxbGl0ZURhcHBlckV4YW1wbGVHZW4iLCJ1c2VEYXBwZXIiOnRydWUsIm92ZXJyaWRlRGFwcGVyVmVyc2lvbiI6IiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJkZWNpbWFsIiwibm90TnVsbCI6dHJ1ZX19LHsiY29sdW1uIjoiKjpjX3RleHRfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUiLCJub3ROdWxsIjpmYWxzZX19XSwiZGVidWdSZXF1ZXN0IjpmYWxzZX0=" + "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwibmFtZXNwYWNlTmFtZSI6IlNxbGl0ZURhcHBlckV4YW1wbGVHZW4iLCJ1c2VEYXBwZXIiOnRydWUsIm92ZXJyaWRlRGFwcGVyVmVyc2lvbiI6IiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJkZWNpbWFsIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2Jvb2xfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiYm9vbCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wiLCJub3ROdWxsIjpmYWxzZX19XSwiZGVidWdSZXF1ZXN0IjpmYWxzZX0=" } \ No newline at end of file diff --git a/examples/SqliteDapperExample/request.message b/examples/SqliteDapperExample/request.message index 6bfed14c..86cf9998 100644 Binary files a/examples/SqliteDapperExample/request.message and b/examples/SqliteDapperExample/request.message differ diff --git a/examples/SqliteDapperLegacyExample/Models.cs b/examples/SqliteDapperLegacyExample/Models.cs index ab4efc16..2c501aef 100644 --- a/examples/SqliteDapperLegacyExample/Models.cs +++ b/examples/SqliteDapperLegacyExample/Models.cs @@ -24,5 +24,7 @@ public class TypesSqlite public byte[] CBlob { get; set; } public string CTextDatetimeOverride { get; set; } public int? CIntegerDatetimeOverride { get; set; } + public string CTextBoolOverride { get; set; } + public int? CIntegerBoolOverride { get; set; } }; } \ No newline at end of file diff --git a/examples/SqliteDapperLegacyExample/QuerySql.cs b/examples/SqliteDapperLegacyExample/QuerySql.cs index 49c65897..20dc1e2b 100644 --- a/examples/SqliteDapperLegacyExample/QuerySql.cs +++ b/examples/SqliteDapperLegacyExample/QuerySql.cs @@ -522,7 +522,7 @@ public async Task DeleteAllAuthors() await this.Transaction.Connection.ExecuteAsync(DeleteAllAuthorsSql, transaction: this.Transaction); } - private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite ( c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override ) VALUES (@c_integer, @c_real, @c_text, @c_blob, @c_text_datetime_override, @c_integer_datetime_override)"; + private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite ( c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override, c_text_bool_override, c_integer_bool_override ) VALUES (@c_integer, @c_real, @c_text, @c_blob, @c_text_datetime_override, @c_integer_datetime_override, @c_text_bool_override, @c_integer_bool_override)"; public class InsertSqliteTypesArgs { public int? CInteger { get; set; } @@ -531,6 +531,8 @@ public class InsertSqliteTypesArgs public byte[] CBlob { get; set; } public DateTime? CTextDatetimeOverride { get; set; } public DateTime? CIntegerDatetimeOverride { get; set; } + public bool? CTextBoolOverride { get; set; } + public bool? CIntegerBoolOverride { get; set; } }; public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) { @@ -541,6 +543,8 @@ public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) queryParams.Add("c_blob", args.CBlob); queryParams.Add("c_text_datetime_override", args.CTextDatetimeOverride != null ? args.CTextDatetimeOverride.Value.ToString("yyyy-MM-dd HH:mm:ss") : null); queryParams.Add("c_integer_datetime_override", args.CIntegerDatetimeOverride != null ? (int? )new DateTimeOffset(args.CIntegerDatetimeOverride.Value.ToUniversalTime()).ToUnixTimeSeconds() : null); + queryParams.Add("c_text_bool_override", args.CTextBoolOverride != null ? Convert.ToString(args.CTextBoolOverride) : null); + queryParams.Add("c_integer_bool_override", args.CIntegerBoolOverride != null ? (int? )Convert.ToInt32(args.CIntegerBoolOverride) : null); if (this.Transaction == null) { using (var connection = new SqliteConnection(ConnectionString)) @@ -580,7 +584,7 @@ public async Task InsertSqliteTypesBatch(List args) } } - private const string GetSqliteTypesSql = "SELECT c_integer, c_real, c_text, c_blob, c_text_datetime_override, datetime(c_integer_datetime_override, 'unixepoch') AS c_integer_datetime_override FROM types_sqlite LIMIT 1"; + private const string GetSqliteTypesSql = "SELECT c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override, c_text_bool_override, c_integer_bool_override FROM types_sqlite LIMIT 1"; public class GetSqliteTypesRow { public int? CInteger { get; set; } @@ -589,6 +593,8 @@ public class GetSqliteTypesRow public byte[] CBlob { get; set; } public DateTime? CTextDatetimeOverride { get; set; } public DateTime? CIntegerDatetimeOverride { get; set; } + public bool? CTextBoolOverride { get; set; } + public bool? CIntegerBoolOverride { get; set; } }; public async Task GetSqliteTypes() { @@ -635,7 +641,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/Utils.cs b/examples/SqliteDapperLegacyExample/Utils.cs index 0c542d77..5f682d42 100644 --- a/examples/SqliteDapperLegacyExample/Utils.cs +++ b/examples/SqliteDapperLegacyExample/Utils.cs @@ -9,8 +9,26 @@ namespace SqliteDapperLegacyExampleGen public static class Utils { + private class DateTimeTypeHandler : SqlMapper.TypeHandler + { + public override DateTime Parse(object value) + { + if (value is string s) + return DateTime.Parse(s); + if (value is long l) + return DateTimeOffset.FromUnixTimeSeconds(l).DateTime; + throw new DataException($"Cannot convert {value?.GetType()} to DateTime"); + } + + public override void SetValue(IDbDataParameter parameter, DateTime value) + { + parameter.Value = value; + } + } + public static void ConfigureSqlMapper() { + SqlMapper.AddTypeHandler(typeof(DateTime), new DateTimeTypeHandler()); } public static string TransformQueryForSliceArgs(string originalSql, int sliceSize, string paramName) diff --git a/examples/SqliteDapperLegacyExample/request.json b/examples/SqliteDapperLegacyExample/request.json index 228b58df..8bfc0f57 100644 --- a/examples/SqliteDapperLegacyExample/request.json +++ b/examples/SqliteDapperLegacyExample/request.json @@ -13,7 +13,7 @@ "codegen": { "out": "examples/SqliteDapperLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJkZWNpbWFsIn19LHsiY29sdW1uIjoiKjpjX3RleHRfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6IkRhdGVUaW1lIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJ1c2VEYXBwZXIiOnRydWV9", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXRzdGFuZGFyZDIuMCIsInVzZURhcHBlciI6dHJ1ZX0=", "process": { "cmd": "./dist/LocalRunner" } @@ -178,6 +178,26 @@ "type": { "name": "INTEGER" } + }, + { + "name": "c_text_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + } + }, + { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + } } ] } @@ -988,7 +1008,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO types_sqlite \n(\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override\n) \nVALUES (?, ?, ?, ?, ?, ?)", + "text": "INSERT INTO types_sqlite \n(\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override,\n c_text_bool_override,\n c_integer_bool_override\n) \nVALUES (?, ?, ?, ?, ?, ?, ?, ?)", "name": "InsertSqliteTypes", "cmd": ":exec", "parameters": [ @@ -1081,6 +1101,36 @@ }, "originalName": "c_integer_datetime_override" } + }, + { + "number": 7, + "column": { + "name": "c_text_bool_override", + "length": -1, + "table": { + "schema": "main", + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + }, + "originalName": "c_text_bool_override" + } + }, + { + "number": 8, + "column": { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "schema": "main", + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + }, + "originalName": "c_integer_bool_override" + } } ], "filename": "query.sql", @@ -1145,7 +1195,7 @@ } }, { - "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n datetime(c_integer_datetime_override, 'unixepoch')\n AS c_integer_datetime_override\nFROM types_sqlite\nLIMIT 1", + "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override,\n c_text_bool_override,\n c_integer_bool_override\nFROM types_sqlite\nLIMIT 1", "name": "GetSqliteTypes", "cmd": ":one", "columns": [ @@ -1207,10 +1257,35 @@ { "name": "c_integer_datetime_override", "length": -1, - "isFuncCall": true, + "table": { + "name": "types_sqlite" + }, "type": { - "name": "any" - } + "name": "INTEGER" + }, + "originalName": "c_integer_datetime_override" + }, + { + "name": "c_text_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + }, + "originalName": "c_text_bool_override" + }, + { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + }, + "originalName": "c_integer_bool_override" } ], "filename": "query.sql" @@ -1316,5 +1391,5 @@ } ], "sqlc_version": "v1.30.0", - "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsInVzZURhcHBlciI6dHJ1ZSwib3ZlcnJpZGVEYXBwZXJWZXJzaW9uIjoiIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50Iiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmciLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9yZWFsIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImRlY2ltYWwiLCJub3ROdWxsIjp0cnVlfX0seyJjb2x1bW4iOiIqOmNfdGV4dF9kYXRldGltZV9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9kYXRldGltZV9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSIsIm5vdE51bGwiOmZhbHNlfX1dLCJkZWJ1Z1JlcXVlc3QiOmZhbHNlfQ==" + "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyTGVnYWN5RXhhbXBsZUdlbiIsInVzZURhcHBlciI6dHJ1ZSwib3ZlcnJpZGVEYXBwZXJWZXJzaW9uIjoiIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50Iiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmciLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9yZWFsIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImRlY2ltYWwiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX3RleHRfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX3RleHRfYm9vbF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJib29sIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX2Jvb2xfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiYm9vbCIsIm5vdE51bGwiOmZhbHNlfX1dLCJkZWJ1Z1JlcXVlc3QiOmZhbHNlfQ==" } \ No newline at end of file diff --git a/examples/SqliteDapperLegacyExample/request.message b/examples/SqliteDapperLegacyExample/request.message index e8aa55e8..899015a2 100644 Binary files a/examples/SqliteDapperLegacyExample/request.message and b/examples/SqliteDapperLegacyExample/request.message differ diff --git a/examples/SqliteExample/Models.cs b/examples/SqliteExample/Models.cs index 46b155f1..707ef0f4 100644 --- a/examples/SqliteExample/Models.cs +++ b/examples/SqliteExample/Models.cs @@ -4,4 +4,4 @@ namespace SqliteExampleGen; public readonly record struct Author(int Id, string Name, string? Bio); public readonly record struct Book(int Id, string Name, int AuthorId, string? Description); -public readonly record struct TypesSqlite(int? CInteger, decimal? CReal, string? CText, byte[]? CBlob, string? CTextDatetimeOverride, int? CIntegerDatetimeOverride); \ No newline at end of file +public readonly record struct TypesSqlite(int? CInteger, decimal? CReal, string? CText, byte[]? CBlob, string? CTextDatetimeOverride, int? CIntegerDatetimeOverride, string? CTextBoolOverride, int? CIntegerBoolOverride); \ No newline at end of file diff --git a/examples/SqliteExample/QuerySql.cs b/examples/SqliteExample/QuerySql.cs index b9cace11..993439e6 100644 --- a/examples/SqliteExample/QuerySql.cs +++ b/examples/SqliteExample/QuerySql.cs @@ -682,8 +682,8 @@ public async Task DeleteAllAuthors() } } - private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite ( c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override ) VALUES (@c_integer, @c_real, @c_text, @c_blob, @c_text_datetime_override, @c_integer_datetime_override)"; - public readonly record struct InsertSqliteTypesArgs(int? CInteger, decimal? CReal, string? CText, byte[]? CBlob, DateTime? CTextDatetimeOverride, DateTime? CIntegerDatetimeOverride); + private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite ( c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override, c_text_bool_override, c_integer_bool_override ) VALUES (@c_integer, @c_real, @c_text, @c_blob, @c_text_datetime_override, @c_integer_datetime_override, @c_text_bool_override, @c_integer_bool_override)"; + public readonly record struct InsertSqliteTypesArgs(int? CInteger, decimal? CReal, string? CText, byte[]? CBlob, DateTime? CTextDatetimeOverride, DateTime? CIntegerDatetimeOverride, bool? CTextBoolOverride, bool? CIntegerBoolOverride); public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) { if (this.Transaction == null) @@ -699,6 +699,8 @@ public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) command.Parameters.AddWithValue("@c_blob", args.CBlob ?? (object)DBNull.Value); command.Parameters.AddWithValue("@c_text_datetime_override", args.CTextDatetimeOverride != null ? args.CTextDatetimeOverride.Value.ToString("yyyy-MM-dd HH:mm:ss") : (object)DBNull.Value); command.Parameters.AddWithValue("@c_integer_datetime_override", args.CIntegerDatetimeOverride != null ? (int? )new DateTimeOffset(args.CIntegerDatetimeOverride.Value.ToUniversalTime()).ToUnixTimeSeconds() : (object)DBNull.Value); + command.Parameters.AddWithValue("@c_text_bool_override", args.CTextBoolOverride != null ? Convert.ToString(args.CTextBoolOverride) : (object)DBNull.Value); + command.Parameters.AddWithValue("@c_integer_bool_override", args.CIntegerBoolOverride != null ? (int? )Convert.ToInt32(args.CIntegerBoolOverride) : (object)DBNull.Value); await command.ExecuteNonQueryAsync(); } } @@ -718,6 +720,8 @@ public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) command.Parameters.AddWithValue("@c_blob", args.CBlob ?? (object)DBNull.Value); command.Parameters.AddWithValue("@c_text_datetime_override", args.CTextDatetimeOverride != null ? args.CTextDatetimeOverride.Value.ToString("yyyy-MM-dd HH:mm:ss") : (object)DBNull.Value); command.Parameters.AddWithValue("@c_integer_datetime_override", args.CIntegerDatetimeOverride != null ? (int? )new DateTimeOffset(args.CIntegerDatetimeOverride.Value.ToUniversalTime()).ToUnixTimeSeconds() : (object)DBNull.Value); + command.Parameters.AddWithValue("@c_text_bool_override", args.CTextBoolOverride != null ? Convert.ToString(args.CTextBoolOverride) : (object)DBNull.Value); + command.Parameters.AddWithValue("@c_integer_bool_override", args.CIntegerBoolOverride != null ? (int? )Convert.ToInt32(args.CIntegerBoolOverride) : (object)DBNull.Value); await command.ExecuteNonQueryAsync(); } } @@ -744,8 +748,8 @@ public async Task InsertSqliteTypesBatch(List args) } } - private const string GetSqliteTypesSql = "SELECT c_integer, c_real, c_text, c_blob, c_text_datetime_override, datetime(c_integer_datetime_override, 'unixepoch') AS c_integer_datetime_override FROM types_sqlite LIMIT 1"; - public readonly record struct GetSqliteTypesRow(int? CInteger, decimal? CReal, string? CText, byte[]? CBlob, DateTime? CTextDatetimeOverride, DateTime? CIntegerDatetimeOverride); + private const string GetSqliteTypesSql = "SELECT c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override, c_text_bool_override, c_integer_bool_override FROM types_sqlite LIMIT 1"; + public readonly record struct GetSqliteTypesRow(int? CInteger, decimal? CReal, string? CText, byte[]? CBlob, DateTime? CTextDatetimeOverride, DateTime? CIntegerDatetimeOverride, bool? CTextBoolOverride, bool? CIntegerBoolOverride); public async Task GetSqliteTypes() { if (this.Transaction == null) @@ -766,7 +770,9 @@ public async Task InsertSqliteTypesBatch(List args) CText = reader.IsDBNull(2) ? null : reader.GetString(2), CBlob = reader.IsDBNull(3) ? null : reader.GetFieldValue(3), CTextDatetimeOverride = reader.IsDBNull(4) ? null : DateTime.Parse(reader.GetString(4)), - CIntegerDatetimeOverride = reader.IsDBNull(5) ? null : DateTime.Parse(reader.GetString(5)) + CIntegerDatetimeOverride = reader.IsDBNull(5) ? null : DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32(5)).DateTime, + CTextBoolOverride = reader.IsDBNull(6) ? null : Convert.ToBoolean(reader.GetString(6)), + CIntegerBoolOverride = reader.IsDBNull(7) ? null : Convert.ToBoolean(reader.GetInt32(7)) }; } } @@ -793,7 +799,9 @@ public async Task InsertSqliteTypesBatch(List args) CText = reader.IsDBNull(2) ? null : reader.GetString(2), CBlob = reader.IsDBNull(3) ? null : reader.GetFieldValue(3), CTextDatetimeOverride = reader.IsDBNull(4) ? null : DateTime.Parse(reader.GetString(4)), - CIntegerDatetimeOverride = reader.IsDBNull(5) ? null : DateTime.Parse(reader.GetString(5)) + CIntegerDatetimeOverride = reader.IsDBNull(5) ? null : DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32(5)).DateTime, + CTextBoolOverride = reader.IsDBNull(6) ? null : Convert.ToBoolean(reader.GetString(6)), + CIntegerBoolOverride = reader.IsDBNull(7) ? null : Convert.ToBoolean(reader.GetInt32(7)) }; } } @@ -859,7 +867,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() { if (this.Transaction == null) @@ -876,7 +884,7 @@ public async Task InsertSqliteTypesBatch(List args) return new GetSqliteFunctionsRow { MaxInteger = reader.IsDBNull(0) ? null : reader.GetInt32(0), - MaxReal = reader.GetDecimal(1), + MaxReal = reader.IsDBNull(1) ? null : reader.GetDecimal(1), MaxText = reader.IsDBNull(2) ? null : reader.GetValue(2) }; } @@ -900,7 +908,7 @@ public async Task InsertSqliteTypesBatch(List args) return new GetSqliteFunctionsRow { MaxInteger = reader.IsDBNull(0) ? null : reader.GetInt32(0), - MaxReal = reader.GetDecimal(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 f53cba53..9471287a 100644 --- a/examples/SqliteExample/request.json +++ b/examples/SqliteExample/request.json @@ -13,7 +13,7 @@ "codegen": { "out": "examples/SqliteExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJkZWNpbWFsIn19LHsiY29sdW1uIjoiKjpjX3RleHRfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6IkRhdGVUaW1lIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", "process": { "cmd": "./dist/LocalRunner" } @@ -178,6 +178,26 @@ "type": { "name": "INTEGER" } + }, + { + "name": "c_text_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + } + }, + { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + } } ] } @@ -988,7 +1008,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO types_sqlite \n(\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override\n) \nVALUES (?, ?, ?, ?, ?, ?)", + "text": "INSERT INTO types_sqlite \n(\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override,\n c_text_bool_override,\n c_integer_bool_override\n) \nVALUES (?, ?, ?, ?, ?, ?, ?, ?)", "name": "InsertSqliteTypes", "cmd": ":exec", "parameters": [ @@ -1081,6 +1101,36 @@ }, "originalName": "c_integer_datetime_override" } + }, + { + "number": 7, + "column": { + "name": "c_text_bool_override", + "length": -1, + "table": { + "schema": "main", + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + }, + "originalName": "c_text_bool_override" + } + }, + { + "number": 8, + "column": { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "schema": "main", + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + }, + "originalName": "c_integer_bool_override" + } } ], "filename": "query.sql", @@ -1145,7 +1195,7 @@ } }, { - "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n datetime(c_integer_datetime_override, 'unixepoch')\n AS c_integer_datetime_override\nFROM types_sqlite\nLIMIT 1", + "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override,\n c_text_bool_override,\n c_integer_bool_override\nFROM types_sqlite\nLIMIT 1", "name": "GetSqliteTypes", "cmd": ":one", "columns": [ @@ -1207,10 +1257,35 @@ { "name": "c_integer_datetime_override", "length": -1, - "isFuncCall": true, + "table": { + "name": "types_sqlite" + }, "type": { - "name": "any" - } + "name": "INTEGER" + }, + "originalName": "c_integer_datetime_override" + }, + { + "name": "c_text_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + }, + "originalName": "c_text_bool_override" + }, + { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + }, + "originalName": "c_integer_bool_override" } ], "filename": "query.sql" @@ -1316,5 +1391,5 @@ } ], "sqlc_version": "v1.30.0", - "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwibmFtZXNwYWNlTmFtZSI6IlNxbGl0ZUV4YW1wbGVHZW4iLCJ1c2VEYXBwZXIiOmZhbHNlLCJvdmVycmlkZURhcHBlclZlcnNpb24iOiIiLCJvdmVycmlkZXMiOlt7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfaW50ZWdlciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJpbnQiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCIsIm5vdE51bGwiOnRydWV9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6ZmFsc2V9fV0sImRlYnVnUmVxdWVzdCI6ZmFsc2V9" + "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwibmFtZXNwYWNlTmFtZSI6IlNxbGl0ZUV4YW1wbGVHZW4iLCJ1c2VEYXBwZXIiOmZhbHNlLCJvdmVycmlkZURhcHBlclZlcnNpb24iOiIiLCJvdmVycmlkZXMiOlt7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfaW50ZWdlciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJpbnQiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfdGV4dF9kYXRldGltZV9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9kYXRldGltZV9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfYm9vbF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJib29sIiwibm90TnVsbCI6ZmFsc2V9fV0sImRlYnVnUmVxdWVzdCI6ZmFsc2V9" } \ No newline at end of file diff --git a/examples/SqliteExample/request.message b/examples/SqliteExample/request.message index cc48114f..344dee9b 100644 Binary files a/examples/SqliteExample/request.message and b/examples/SqliteExample/request.message differ diff --git a/examples/SqliteLegacyExample/Models.cs b/examples/SqliteLegacyExample/Models.cs index 11f02780..d07f1dc8 100644 --- a/examples/SqliteLegacyExample/Models.cs +++ b/examples/SqliteLegacyExample/Models.cs @@ -24,5 +24,7 @@ public class TypesSqlite public byte[] CBlob { get; set; } public string CTextDatetimeOverride { get; set; } public int? CIntegerDatetimeOverride { get; set; } + public string CTextBoolOverride { get; set; } + public int? CIntegerBoolOverride { get; set; } }; } \ No newline at end of file diff --git a/examples/SqliteLegacyExample/QuerySql.cs b/examples/SqliteLegacyExample/QuerySql.cs index e4f85b21..604e0b1f 100644 --- a/examples/SqliteLegacyExample/QuerySql.cs +++ b/examples/SqliteLegacyExample/QuerySql.cs @@ -784,7 +784,7 @@ public async Task DeleteAllAuthors() } } - private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite ( c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override ) VALUES (@c_integer, @c_real, @c_text, @c_blob, @c_text_datetime_override, @c_integer_datetime_override)"; + private const string InsertSqliteTypesSql = "INSERT INTO types_sqlite ( c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override, c_text_bool_override, c_integer_bool_override ) VALUES (@c_integer, @c_real, @c_text, @c_blob, @c_text_datetime_override, @c_integer_datetime_override, @c_text_bool_override, @c_integer_bool_override)"; public class InsertSqliteTypesArgs { public int? CInteger { get; set; } @@ -793,6 +793,8 @@ public class InsertSqliteTypesArgs public byte[] CBlob { get; set; } public DateTime? CTextDatetimeOverride { get; set; } public DateTime? CIntegerDatetimeOverride { get; set; } + public bool? CTextBoolOverride { get; set; } + public bool? CIntegerBoolOverride { get; set; } }; public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) { @@ -809,6 +811,8 @@ public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) command.Parameters.AddWithValue("@c_blob", args.CBlob ?? (object)DBNull.Value); command.Parameters.AddWithValue("@c_text_datetime_override", args.CTextDatetimeOverride != null ? args.CTextDatetimeOverride.Value.ToString("yyyy-MM-dd HH:mm:ss") : (object)DBNull.Value); command.Parameters.AddWithValue("@c_integer_datetime_override", args.CIntegerDatetimeOverride != null ? (int? )new DateTimeOffset(args.CIntegerDatetimeOverride.Value.ToUniversalTime()).ToUnixTimeSeconds() : (object)DBNull.Value); + command.Parameters.AddWithValue("@c_text_bool_override", args.CTextBoolOverride != null ? Convert.ToString(args.CTextBoolOverride) : (object)DBNull.Value); + command.Parameters.AddWithValue("@c_integer_bool_override", args.CIntegerBoolOverride != null ? (int? )Convert.ToInt32(args.CIntegerBoolOverride) : (object)DBNull.Value); await command.ExecuteNonQueryAsync(); } } @@ -828,6 +832,8 @@ public async Task InsertSqliteTypes(InsertSqliteTypesArgs args) command.Parameters.AddWithValue("@c_blob", args.CBlob ?? (object)DBNull.Value); command.Parameters.AddWithValue("@c_text_datetime_override", args.CTextDatetimeOverride != null ? args.CTextDatetimeOverride.Value.ToString("yyyy-MM-dd HH:mm:ss") : (object)DBNull.Value); command.Parameters.AddWithValue("@c_integer_datetime_override", args.CIntegerDatetimeOverride != null ? (int? )new DateTimeOffset(args.CIntegerDatetimeOverride.Value.ToUniversalTime()).ToUnixTimeSeconds() : (object)DBNull.Value); + command.Parameters.AddWithValue("@c_text_bool_override", args.CTextBoolOverride != null ? Convert.ToString(args.CTextBoolOverride) : (object)DBNull.Value); + command.Parameters.AddWithValue("@c_integer_bool_override", args.CIntegerBoolOverride != null ? (int? )Convert.ToInt32(args.CIntegerBoolOverride) : (object)DBNull.Value); await command.ExecuteNonQueryAsync(); } } @@ -859,7 +865,7 @@ public async Task InsertSqliteTypesBatch(List args) } } - private const string GetSqliteTypesSql = "SELECT c_integer, c_real, c_text, c_blob, c_text_datetime_override, datetime(c_integer_datetime_override, 'unixepoch') AS c_integer_datetime_override FROM types_sqlite LIMIT 1"; + private const string GetSqliteTypesSql = "SELECT c_integer, c_real, c_text, c_blob, c_text_datetime_override, c_integer_datetime_override, c_text_bool_override, c_integer_bool_override FROM types_sqlite LIMIT 1"; public class GetSqliteTypesRow { public int? CInteger { get; set; } @@ -868,6 +874,8 @@ public class GetSqliteTypesRow public byte[] CBlob { get; set; } public DateTime? CTextDatetimeOverride { get; set; } public DateTime? CIntegerDatetimeOverride { get; set; } + public bool? CTextBoolOverride { get; set; } + public bool? CIntegerBoolOverride { get; set; } }; public async Task GetSqliteTypes() { @@ -889,7 +897,9 @@ public async Task GetSqliteTypes() CText = reader.IsDBNull(2) ? null : reader.GetString(2), CBlob = reader.IsDBNull(3) ? null : reader.GetFieldValue(3), CTextDatetimeOverride = reader.IsDBNull(4) ? (DateTime? )null : DateTime.Parse(reader.GetString(4)), - CIntegerDatetimeOverride = reader.IsDBNull(5) ? (DateTime? )null : DateTime.Parse(reader.GetString(5)) + CIntegerDatetimeOverride = reader.IsDBNull(5) ? (DateTime? )null : DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32(5)).DateTime, + CTextBoolOverride = reader.IsDBNull(6) ? (bool? )null : Convert.ToBoolean(reader.GetString(6)), + CIntegerBoolOverride = reader.IsDBNull(7) ? (bool? )null : Convert.ToBoolean(reader.GetInt32(7)) }; } } @@ -916,7 +926,9 @@ public async Task GetSqliteTypes() CText = reader.IsDBNull(2) ? null : reader.GetString(2), CBlob = reader.IsDBNull(3) ? null : reader.GetFieldValue(3), CTextDatetimeOverride = reader.IsDBNull(4) ? (DateTime? )null : DateTime.Parse(reader.GetString(4)), - CIntegerDatetimeOverride = reader.IsDBNull(5) ? (DateTime? )null : DateTime.Parse(reader.GetString(5)) + CIntegerDatetimeOverride = reader.IsDBNull(5) ? (DateTime? )null : DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32(5)).DateTime, + CTextBoolOverride = reader.IsDBNull(6) ? (bool? )null : Convert.ToBoolean(reader.GetString(6)), + CIntegerBoolOverride = reader.IsDBNull(7) ? (bool? )null : Convert.ToBoolean(reader.GetInt32(7)) }; } } @@ -992,7 +1004,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() @@ -1011,7 +1023,7 @@ public async Task GetSqliteFunctions() return new GetSqliteFunctionsRow { MaxInteger = reader.IsDBNull(0) ? (int? )null : reader.GetInt32(0), - MaxReal = reader.GetDecimal(1), + MaxReal = reader.IsDBNull(1) ? (decimal? )null : reader.GetDecimal(1), MaxText = reader.IsDBNull(2) ? null : reader.GetValue(2) }; } @@ -1035,7 +1047,7 @@ public async Task GetSqliteFunctions() return new GetSqliteFunctionsRow { MaxInteger = reader.IsDBNull(0) ? (int? )null : reader.GetInt32(0), - MaxReal = reader.GetDecimal(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 f14042b2..9cbe112a 100644 --- a/examples/SqliteLegacyExample/request.json +++ b/examples/SqliteLegacyExample/request.json @@ -13,7 +13,7 @@ "codegen": { "out": "examples/SqliteLegacyExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6InN0cmluZyJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJkZWNpbWFsIn19LHsiY29sdW1uIjoiKjpjX3RleHRfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6IkRhdGVUaW1lIn19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlTGVnYWN5RXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXRzdGFuZGFyZDIuMCIsInVzZURhcHBlciI6ZmFsc2V9", "process": { "cmd": "./dist/LocalRunner" } @@ -178,6 +178,26 @@ "type": { "name": "INTEGER" } + }, + { + "name": "c_text_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + } + }, + { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + } } ] } @@ -988,7 +1008,7 @@ "filename": "query.sql" }, { - "text": "INSERT INTO types_sqlite \n(\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override\n) \nVALUES (?, ?, ?, ?, ?, ?)", + "text": "INSERT INTO types_sqlite \n(\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override,\n c_text_bool_override,\n c_integer_bool_override\n) \nVALUES (?, ?, ?, ?, ?, ?, ?, ?)", "name": "InsertSqliteTypes", "cmd": ":exec", "parameters": [ @@ -1081,6 +1101,36 @@ }, "originalName": "c_integer_datetime_override" } + }, + { + "number": 7, + "column": { + "name": "c_text_bool_override", + "length": -1, + "table": { + "schema": "main", + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + }, + "originalName": "c_text_bool_override" + } + }, + { + "number": 8, + "column": { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "schema": "main", + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + }, + "originalName": "c_integer_bool_override" + } } ], "filename": "query.sql", @@ -1145,7 +1195,7 @@ } }, { - "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n datetime(c_integer_datetime_override, 'unixepoch')\n AS c_integer_datetime_override\nFROM types_sqlite\nLIMIT 1", + "text": "SELECT\n c_integer,\n c_real,\n c_text,\n c_blob,\n c_text_datetime_override,\n c_integer_datetime_override,\n c_text_bool_override,\n c_integer_bool_override\nFROM types_sqlite\nLIMIT 1", "name": "GetSqliteTypes", "cmd": ":one", "columns": [ @@ -1207,10 +1257,35 @@ { "name": "c_integer_datetime_override", "length": -1, - "isFuncCall": true, + "table": { + "name": "types_sqlite" + }, "type": { - "name": "any" - } + "name": "INTEGER" + }, + "originalName": "c_integer_datetime_override" + }, + { + "name": "c_text_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "TEXT" + }, + "originalName": "c_text_bool_override" + }, + { + "name": "c_integer_bool_override", + "length": -1, + "table": { + "name": "types_sqlite" + }, + "type": { + "name": "INTEGER" + }, + "originalName": "c_integer_bool_override" } ], "filename": "query.sql" @@ -1316,5 +1391,5 @@ } ], "sqlc_version": "v1.30.0", - "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlTGVnYWN5RXhhbXBsZUdlbiIsInVzZURhcHBlciI6ZmFsc2UsIm92ZXJyaWRlRGFwcGVyVmVyc2lvbiI6IiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJkZWNpbWFsIiwibm90TnVsbCI6dHJ1ZX19LHsiY29sdW1uIjoiKjpjX3RleHRfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUiLCJub3ROdWxsIjpmYWxzZX19XSwiZGVidWdSZXF1ZXN0IjpmYWxzZX0=" + "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0c3RhbmRhcmQyLjAiLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlTGVnYWN5RXhhbXBsZUdlbiIsInVzZURhcHBlciI6ZmFsc2UsIm92ZXJyaWRlRGFwcGVyVmVyc2lvbiI6IiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJkZWNpbWFsIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2Jvb2xfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiYm9vbCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wiLCJub3ROdWxsIjpmYWxzZX19XSwiZGVidWdSZXF1ZXN0IjpmYWxzZX0=" } \ No newline at end of file diff --git a/examples/SqliteLegacyExample/request.message b/examples/SqliteLegacyExample/request.message index 98d354f7..1fc6e731 100644 Binary files a/examples/SqliteLegacyExample/request.message and b/examples/SqliteLegacyExample/request.message differ diff --git a/examples/config/sqlite/types/query.sql b/examples/config/sqlite/types/query.sql index 2f566c2d..04e19dff 100644 --- a/examples/config/sqlite/types/query.sql +++ b/examples/config/sqlite/types/query.sql @@ -6,9 +6,11 @@ INSERT INTO types_sqlite c_text, c_blob, c_text_datetime_override, - c_integer_datetime_override + c_integer_datetime_override, + c_text_bool_override, + c_integer_bool_override ) -VALUES (?, ?, ?, ?, ?, ?); +VALUES (?, ?, ?, ?, ?, ?, ?, ?); -- name: InsertSqliteTypesBatch :copyfrom INSERT INTO types_sqlite (c_integer, c_real, c_text) VALUES (?, ?, ?); @@ -20,8 +22,9 @@ SELECT c_text, c_blob, c_text_datetime_override, - datetime(c_integer_datetime_override, 'unixepoch') - AS c_integer_datetime_override + c_integer_datetime_override, + c_text_bool_override, + c_integer_bool_override FROM types_sqlite LIMIT 1; diff --git a/examples/config/sqlite/types/schema.sql b/examples/config/sqlite/types/schema.sql index f90f33e8..2a83a6a1 100644 --- a/examples/config/sqlite/types/schema.sql +++ b/examples/config/sqlite/types/schema.sql @@ -1,8 +1,10 @@ CREATE TABLE types_sqlite ( - c_integer INTEGER, - c_real REAL, - c_text TEXT, - c_blob BLOB, - c_text_datetime_override TEXT DEFAULT (datetime('now')), - c_integer_datetime_override INTEGER -); \ No newline at end of file + c_integer INTEGER, + c_real REAL, + c_text TEXT, + c_blob BLOB, + c_text_datetime_override TEXT, + c_integer_datetime_override INTEGER, + c_text_bool_override TEXT, + c_integer_bool_override INTEGER +); diff --git a/sqlc.ci.yaml b/sqlc.ci.yaml index 878fa495..fc81c317 100644 --- a/sqlc.ci.yaml +++ b/sqlc.ci.yaml @@ -313,23 +313,24 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" - schema: ["examples/config/sqlite/authors/schema.sql", "examples/config/sqlite/types/schema.sql"] queries: ["examples/config/sqlite/authors/query.sql", "examples/config/sqlite/types/query.sql"] engine: "sqlite" @@ -345,23 +346,24 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" - schema: ["examples/config/sqlite/authors/schema.sql", "examples/config/sqlite/types/schema.sql"] queries: ["examples/config/sqlite/authors/query.sql", "examples/config/sqlite/types/query.sql"] engine: "sqlite" @@ -377,23 +379,24 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" - schema: ["examples/config/sqlite/authors/schema.sql", "examples/config/sqlite/types/schema.sql"] queries: ["examples/config/sqlite/authors/query.sql", "examples/config/sqlite/types/query.sql"] engine: "sqlite" @@ -409,20 +412,21 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false \ No newline at end of file + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" \ No newline at end of file diff --git a/sqlc.local.generated.yaml b/sqlc.local.generated.yaml index 5bcbae99..94603a55 100644 --- a/sqlc.local.generated.yaml +++ b/sqlc.local.generated.yaml @@ -310,23 +310,24 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" - schema: ["examples/config/sqlite/authors/schema.sql", "examples/config/sqlite/types/schema.sql"] queries: ["examples/config/sqlite/authors/query.sql", "examples/config/sqlite/types/query.sql"] engine: "sqlite" @@ -342,23 +343,24 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" - schema: ["examples/config/sqlite/authors/schema.sql", "examples/config/sqlite/types/schema.sql"] queries: ["examples/config/sqlite/authors/query.sql", "examples/config/sqlite/types/query.sql"] engine: "sqlite" @@ -374,23 +376,24 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" - schema: ["examples/config/sqlite/authors/schema.sql", "examples/config/sqlite/types/schema.sql"] queries: ["examples/config/sqlite/authors/query.sql", "examples/config/sqlite/types/query.sql"] engine: "sqlite" @@ -406,20 +409,21 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" diff --git a/sqlc.request.generated.yaml b/sqlc.request.generated.yaml index 3467598e..502a9147 100644 --- a/sqlc.request.generated.yaml +++ b/sqlc.request.generated.yaml @@ -318,23 +318,24 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" debugRequest: true - schema: ["examples/config/sqlite/authors/schema.sql", "examples/config/sqlite/types/schema.sql"] queries: ["examples/config/sqlite/authors/query.sql", "examples/config/sqlite/types/query.sql"] @@ -351,23 +352,24 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" debugRequest: true - schema: ["examples/config/sqlite/authors/schema.sql", "examples/config/sqlite/types/schema.sql"] queries: ["examples/config/sqlite/authors/query.sql", "examples/config/sqlite/types/query.sql"] @@ -384,23 +386,24 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" debugRequest: true - schema: ["examples/config/sqlite/authors/schema.sql", "examples/config/sqlite/types/schema.sql"] queries: ["examples/config/sqlite/authors/query.sql", "examples/config/sqlite/types/query.sql"] @@ -417,21 +420,22 @@ 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 - column: "*:c_text_datetime_override" csharp_type: type: "DateTime" - notNull: false - column: "*:c_integer_datetime_override" csharp_type: type: "DateTime" - notNull: false + - column: "*:c_text_bool_override" + csharp_type: + type: "bool" + - column: "*:c_integer_bool_override" + csharp_type: + type: "bool" debugRequest: true