Skip to content

Commit bbee0b2

Browse files
[release][minor] fix: move sqlc config files to be have generated indicator + refactor (#258)
* fix: move sqlc config files to be have generated indicator + refactor * fix: more code refactoring * fix: columns mapping refactoring * fix: more TODOs * fix: refactor id column type logic * feat: added option to override field for all queries * fix: update override field for all queries doc * fix: add Postgres JSON types * feat: add tests for :copyfrom geo types in Postgres * fix: geo postgres types docs * feat: add support for bpchar Postgres type * feat: add support for JSONB Postgres field * feat: support more array types in Postgres * fix: indicate no support for time with time zone Postgres data type * feat: support uuid Postgres data type * feat: support uuid Postgres data type in :copyfrom * feat: support interval Postgres data type with and without :copyfrom * feat: support JSONPATH Postgres data type * feat: support Postgres network data types
1 parent a672655 commit bbee0b2

97 files changed

Lines changed: 7617 additions & 2414 deletions

File tree

Some content is hidden

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

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,4 @@ jobs:
126126
- name: Verify pushed codegen requests are synced
127127
run: |
128128
dotnet publish LocalRunner -c release --output dist/
129-
sqlc -f sqlc.requests.yaml diff
129+
sqlc -f sqlc.request.generated.yaml diff

CodeGenerator/CodeGenerator.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ private Dictionary<string, Dictionary<string, Table>> ConstructTablesLookup(Cata
118118

119119
/// <summary>
120120
/// Enums in the request exist only in the default schema (in mysql), this remaps enums to their original schema.
121-
/// Unusual behavior we might have to fix in the future - TODO
122121
/// </summary>
123122
/// <param name="catalog"></param>
124123
/// <returns></returns>
@@ -180,12 +179,13 @@ public Task<GenerateResponse> Generate(GenerateRequest generateRequest)
180179
}
181180
});
182181

183-
var fileQueries = GetFileQueries();
184-
var files = fileQueries
182+
var files = GetFileQueries()
185183
.Select(fq => QueriesGen.GenerateFile(fq.Value, fq.Key))
186-
.Append(ModelsGen.GenerateFile(Tables, Enums))
187-
.AppendIfNotNull(UtilsGen.GenerateFile())
188-
.AppendIf(CsprojGen.GenerateFile(), Options.GenerateCsproj);
184+
.AddRangeExcludeNulls([
185+
ModelsGen.GenerateFile(Tables, Enums),
186+
UtilsGen.GenerateFile()
187+
])
188+
.AddRangeIf([CsprojGen.GenerateFile()], Options.GenerateCsproj);
189189

190190
return Task.FromResult(new GenerateResponse { Files = { files } });
191191

@@ -211,10 +211,9 @@ private static ByteString GetOptionsWithoutDebugRequest(GenerateRequest request)
211211
var text = Encoding.UTF8.GetString(request.PluginOptions.ToByteArray());
212212
var rawOptions = JsonSerializer.Deserialize<RawOptions>(text) ?? throw new InvalidOperationException();
213213
var newOptions = rawOptions with { DebugRequest = false };
214-
return ByteString.CopyFromUtf8(JsonSerializer.Serialize(request));
214+
return ByteString.CopyFromUtf8(JsonSerializer.Serialize(newOptions));
215215
}
216216

217-
218217
private static Plugin.File RequestToJsonFile(GenerateRequest request)
219218
{
220219
var formatter = new JsonFormatter(JsonFormatter.Settings.Default.WithIndentation());

CodeGenerator/Generators/ModelsGen.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Plugin;
33
using SqlcGenCsharp.Drivers;
44
using System.Collections.Generic;
5+
using System.Collections.Immutable;
56
using System.Linq;
67
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
78

@@ -25,6 +26,7 @@ public File GenerateFile(
2526
{
2627
var usingDirectives = dbDriver
2728
.GetUsingDirectivesForModels()
29+
.OrderBy(x => x)
2830
.Select(x => UsingDirective(ParseName(x)))
2931
.ToArray();
3032
var dataclassModels = GenerateDataClasses(tables);

CodeGenerator/Generators/QueriesGen.cs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ private static CompilationUnitSyntax AddResharperDisables(CompilationUnitSyntax
5151
{
5252
var usingDirectives = dbDriver
5353
.GetUsingDirectivesForQueries()
54+
.OrderBy(x => x)
5455
.Select(x => UsingDirective(ParseName(x)))
5556
.ToArray();
5657
var classMembers = queries.SelectMany(GetMembersForSingleQuery);
@@ -59,16 +60,27 @@ private static CompilationUnitSyntax AddResharperDisables(CompilationUnitSyntax
5960

6061
private ClassDeclarationSyntax GetClassDeclaration(string className, IEnumerable<MemberDeclarationSyntax> classMembers)
6162
{
63+
var dapperStatements = dbDriver.Options.UseDapper
64+
? $$"""
65+
Utils.ConfigureSqlMapper();
66+
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
67+
"""
68+
: string.Empty;
6269
var classDeclaration = (ClassDeclarationSyntax)ParseMemberDeclaration(
6370
$$"""
6471
public class {{className}}
6572
{
66-
public {{className}}(string {{Variable.ConnectionString.AsVarName()}})
73+
public {{className}}()
74+
{
75+
{{dapperStatements}}
76+
}
77+
78+
public {{className}}(string {{Variable.ConnectionString.AsVarName()}}) : this()
6779
{
6880
{{dbDriver.GetConstructorStatements().JoinByNewLine()}}
6981
}
7082
71-
private {{className}}({{dbDriver.TransactionClassName}} {{Variable.Transaction.AsVarName()}})
83+
private {{className}}({{dbDriver.TransactionClassName}} {{Variable.Transaction.AsVarName()}}) : this()
7284
{
7385
{{dbDriver.GetTransactionConstructorStatements().JoinByNewLine()}}
7486
}
@@ -90,10 +102,14 @@ private IEnumerable<MemberDeclarationSyntax> GetMembersForSingleQuery(Query quer
90102
try
91103
{
92104
return new List<MemberDeclarationSyntax>()
93-
.AppendIfNotNull(GetQueryTextConstant(query))
94-
.AppendIfNotNull(GetQueryColumnsDataclass(query))
95-
.AppendIfNotNull(GetQueryParamsDataclass(query))
96-
.Append(AddMethodDeclaration(query));
105+
.AddRangeExcludeNulls(
106+
[
107+
GetQueryTextConstant(query),
108+
GetQueryColumnsDataclass(query),
109+
GetQueryParamsDataclass(query),
110+
AddMethodDeclaration(query)
111+
]
112+
);
97113
}
98114
catch (NotSupportedException e)
99115
{

CodeGenerator/Generators/UtilsGen.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ internal class UtilsGen(DbDriver dbDriver, string namespaceName)
2222

2323
var usingDirectives = dbDriver
2424
.GetUsingDirectivesForUtils()
25+
.OrderBy(x => x)
2526
.Select(x => UsingDirective(ParseName(x)))
2627
.ToArray();
2728
var root = RootGen.CompilationRootGen(

CodegenTests/CodegenSchemaTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class CodegenSchemaTests
1111
[Test]
1212
public void TestDefaultSchemaEnum()
1313
{
14-
const string filename = "DefaultSchemaEnum/request.json";
14+
const string filename = "DefaultSchemaEnum/request.message";
1515
var request = TestRequestHelper.ParseRequestFile(filename);
1616
var response = CodeGenerator.Generate(request);
1717

@@ -34,7 +34,7 @@ public void TestDefaultSchemaEnum()
3434
[Test]
3535
public void TestSchemaScopedEnum()
3636
{
37-
const string filename = "SchemaScopedEnum/request.json";
37+
const string filename = "SchemaScopedEnum/request.message";
3838
var request = TestRequestHelper.ParseRequestFile(filename);
3939
var response = CodeGenerator.Generate(request);
4040

CodegenTests/TestRequestHelper.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,16 @@
1-
using Google.Protobuf;
2-
using Plugin;
3-
using System;
4-
using System.IO;
51
using File = System.IO.File;
62

73
namespace CodegenTests;
84

95
public static class TestRequestHelper
106
{
11-
public static GenerateRequest ParseRequestFile(string filename)
7+
public static Plugin.GenerateRequest ParseRequestFile(string filename)
128
{
13-
149
var baseDirectory = AppContext.BaseDirectory;
1510
var filePath = Path.Combine(baseDirectory, "test-requests", filename);
1611

1712
if (!File.Exists(filePath))
1813
throw new FileNotFoundException("File not found", filePath);
19-
var contents = File.ReadAllText(filePath);
20-
var jsonParserSettings = JsonParser.Settings.Default.WithIgnoreUnknownFields(true);
21-
return new JsonParser(jsonParserSettings).Parse<GenerateRequest>(contents);
14+
return Plugin.GenerateRequest.Parser.ParseFrom(File.ReadAllBytes(filePath));
2215
}
2316
}

CodegenTests/test-requests/DefaultSchemaEnum/request.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,5 +101,5 @@
101101
}
102102
],
103103
"sqlc_version": "v1.27.0",
104-
"plugin_options": "eyJTZXR0aW5ncyI6eyJWZXJzaW9uIjoiMiIsIkVuZ2luZSI6Im15c3FsIiwiU2NoZW1hIjpbIkNvZGVnZW5UZXN0cy90ZXN0LXJlcXVlc3RzL0RlZmF1bHRTY2hlbWFFbnVtL3NjaGVtYS5zcWwiXSwiUXVlcmllcyI6WyJDb2RlZ2VuVGVzdHMvdGVzdC1yZXF1ZXN0cy9EZWZhdWx0U2NoZW1hRW51bS9xdWVyeS5zcWwiXSwiQ29kZWdlbiI6eyJPdXQiOiIuL0NvZGVnZW5UZXN0cy90ZXN0LXJlcXVlc3RzL0RlZmF1bHRTY2hlbWFFbnVtIiwiUGx1Z2luIjoiY3NoYXJwIiwiT3B0aW9ucyI6WzEyMywzNCwxMDAsMTAxLDk4LDExNywxMDMsODIsMTAxLDExMywxMTcsMTAxLDExNSwxMTYsMzQsNTgsMTE2LDExNCwxMTcsMTAxLDEyNV0sIkVudiI6W10sIlByb2Nlc3MiOnsiQ21kIjoiLi9kaXN0L0xvY2FsUnVubmVyIn0sIldhc20iOm51bGx9fSwiQ2F0YWxvZyI6eyJDb21tZW50IjoiIiwiRGVmYXVsdFNjaGVtYSI6InB1YmxpYyIsIk5hbWUiOiIiLCJTY2hlbWFzIjpbeyJDb21tZW50IjoiIiwiTmFtZSI6InB1YmxpYyIsIlRhYmxlcyI6W3siUmVsIjp7IkNhdGFsb2ciOiIiLCJTY2hlbWEiOiIiLCJOYW1lIjoiZHVtbXlfdGFibGUifSwiQ29sdW1ucyI6W3siTmFtZSI6ImR1bW15X2NvbHVtbiIsIk5vdE51bGwiOmZhbHNlLCJJc0FycmF5IjpmYWxzZSwiQ29tbWVudCI6IiIsIkxlbmd0aCI6MSwiSXNOYW1lZFBhcmFtIjpmYWxzZSwiSXNGdW5jQ2FsbCI6ZmFsc2UsIlNjb3BlIjoiIiwiVGFibGUiOnsiQ2F0YWxvZyI6IiIsIlNjaGVtYSI6IiIsIk5hbWUiOiJkdW1teV90YWJsZSJ9LCJUYWJsZUFsaWFzIjoiIiwiVHlwZSI6eyJDYXRhbG9nIjoiIiwiU2NoZW1hIjoiIiwiTmFtZSI6ImR1bW15X3RhYmxlX2R1bW15X2NvbHVtbiJ9LCJJc1NxbGNTbGljZSI6ZmFsc2UsIkVtYmVkVGFibGUiOm51bGwsIk9yaWdpbmFsTmFtZSI6IiIsIlVuc2lnbmVkIjpmYWxzZSwiQXJyYXlEaW1zIjowfV0sIkNvbW1lbnQiOiIifV0sIkVudW1zIjpbeyJOYW1lIjoiZHVtbXlfdGFibGVfZHVtbXlfY29sdW1uIiwiVmFscyI6WyJ4IiwieSJdLCJDb21tZW50IjoiIn1dLCJDb21wb3NpdGVUeXBlcyI6W119XX0sIlF1ZXJpZXMiOlt7IlRleHQiOiJTRUxFQ1QgZHVtbXlfY29sdW1uIEZST00gZHVtbXlfdGFibGUgTElNSVQgMSIsIk5hbWUiOiJUZXN0T25lIiwiQ21kIjoiOm9uZSIsIkNvbHVtbnMiOlt7Ik5hbWUiOiJkdW1teV9jb2x1bW4iLCJOb3ROdWxsIjpmYWxzZSwiSXNBcnJheSI6ZmFsc2UsIkNvbW1lbnQiOiIiLCJMZW5ndGgiOjEsIklzTmFtZWRQYXJhbSI6ZmFsc2UsIklzRnVuY0NhbGwiOmZhbHNlLCJTY29wZSI6IiIsIlRhYmxlIjp7IkNhdGFsb2ciOiIiLCJTY2hlbWEiOiIiLCJOYW1lIjoiZHVtbXlfdGFibGUifSwiVGFibGVBbGlhcyI6IiIsIlR5cGUiOnsiQ2F0YWxvZyI6IiIsIlNjaGVtYSI6IiIsIk5hbWUiOiJkdW1teV90YWJsZV9kdW1teV9jb2x1bW4ifSwiSXNTcWxjU2xpY2UiOmZhbHNlLCJFbWJlZFRhYmxlIjpudWxsLCJPcmlnaW5hbE5hbWUiOiJkdW1teV9jb2x1bW4iLCJVbnNpZ25lZCI6ZmFsc2UsIkFycmF5RGltcyI6MH1dLCJQYXJhbXMiOltdLCJDb21tZW50cyI6W10sIkZpbGVuYW1lIjoicXVlcnkuc3FsIiwiSW5zZXJ0SW50b1RhYmxlIjpudWxsfSx7IlRleHQiOiJJTlNFUlQgSU5UTyBkdW1teV90YWJsZSAoZHVtbXlfY29sdW1uKSBWQUxVRVMgKD8pIiwiTmFtZSI6IlRlc3RJbnNlcnQiLCJDbWQiOiI6ZXhlYyIsIkNvbHVtbnMiOltdLCJQYXJhbXMiOlt7Ik51bWJlciI6MSwiQ29sdW1uIjp7Ik5hbWUiOiJkdW1teV9jb2x1bW4iLCJOb3ROdWxsIjpmYWxzZSwiSXNBcnJheSI6ZmFsc2UsIkNvbW1lbnQiOiIiLCJMZW5ndGgiOjEsIklzTmFtZWRQYXJhbSI6ZmFsc2UsIklzRnVuY0NhbGwiOmZhbHNlLCJTY29wZSI6IiIsIlRhYmxlIjp7IkNhdGFsb2ciOiIiLCJTY2hlbWEiOiJwdWJsaWMiLCJOYW1lIjoiZHVtbXlfdGFibGUifSwiVGFibGVBbGlhcyI6IiIsIlR5cGUiOnsiQ2F0YWxvZyI6IiIsIlNjaGVtYSI6IiIsIk5hbWUiOiJkdW1teV90YWJsZV9kdW1teV9jb2x1bW4ifSwiSXNTcWxjU2xpY2UiOmZhbHNlLCJFbWJlZFRhYmxlIjpudWxsLCJPcmlnaW5hbE5hbWUiOiJkdW1teV9jb2x1bW4iLCJVbnNpZ25lZCI6ZmFsc2UsIkFycmF5RGltcyI6MH19XSwiQ29tbWVudHMiOltdLCJGaWxlbmFtZSI6InF1ZXJ5LnNxbCIsIkluc2VydEludG9UYWJsZSI6eyJDYXRhbG9nIjoiIiwiU2NoZW1hIjoiIiwiTmFtZSI6ImR1bW15X3RhYmxlIn19XSwiU3FsY1ZlcnNpb24iOiJ2MS4yNy4wIiwiUGx1Z2luT3B0aW9ucyI6WzEyMywzNCwxMDAsMTAxLDk4LDExNywxMDMsODIsMTAxLDExMywxMTcsMTAxLDExNSwxMTYsMzQsNTgsMTE2LDExNCwxMTcsMTAxLDEyNV0sIkdsb2JhbE9wdGlvbnMiOltdfQ=="
104+
"plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwibmFtZXNwYWNlTmFtZSI6IiIsInVzZURhcHBlciI6ZmFsc2UsIm92ZXJyaWRlRGFwcGVyVmVyc2lvbiI6IiIsIm92ZXJyaWRlcyI6bnVsbCwiZGVidWdSZXF1ZXN0IjpmYWxzZX0="
105105
}

0 commit comments

Comments
 (0)