Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion samples/MySQLToCsharpSampleConsoleApp/BinaryData.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
// Code generated by SqlToCsharp
// ------------------------------------------------------------------------------
// <auto-generated>
// Code Generated by MySQLToCsharp
// </auto-generated>
// ------------------------------------------------------------------------------

using System;
using System.ComponentModel.DataAnnotations;
Expand Down
6 changes: 5 additions & 1 deletion samples/MySQLToCsharpSampleConsoleApp/Character.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
// Code generated by SqlToCsharp
// ------------------------------------------------------------------------------
// <auto-generated>
// Code Generated by MySQLToCsharp
// </auto-generated>
// ------------------------------------------------------------------------------

using System;
using System.ComponentModel.DataAnnotations;
Expand Down
6 changes: 5 additions & 1 deletion samples/MySQLToCsharpSampleConsoleApp/CharacterSlot.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
// Code generated by SqlToCsharp
// ------------------------------------------------------------------------------
// <auto-generated>
// Code Generated by MySQLToCsharp
// </auto-generated>
// ------------------------------------------------------------------------------

using System;
using System.ComponentModel.DataAnnotations;
Expand Down
6 changes: 5 additions & 1 deletion samples/MySQLToCsharpSampleConsoleApp/Multi.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
// Code generated by SqlToCsharp
// ------------------------------------------------------------------------------
// <auto-generated>
// Code Generated by MySQLToCsharp
// </auto-generated>
// ------------------------------------------------------------------------------

using System;
using System.ComponentModel.DataAnnotations;
Expand Down
6 changes: 5 additions & 1 deletion samples/MySQLToCsharpSampleConsoleApp/Player.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
// Code generated by SqlToCsharp
// ------------------------------------------------------------------------------
// <auto-generated>
// Code Generated by MySQLToCsharp
// </auto-generated>
// ------------------------------------------------------------------------------

using System;
using System.ComponentModel.DataAnnotations;
Expand Down
6 changes: 5 additions & 1 deletion samples/MySQLToCsharpSampleConsoleApp/Room.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
// Code generated by SqlToCsharp
// ------------------------------------------------------------------------------
// <auto-generated>
// Code Generated by MySQLToCsharp
// </auto-generated>
// ------------------------------------------------------------------------------

using System;
using System.ComponentModel.DataAnnotations;
Expand Down
6 changes: 5 additions & 1 deletion samples/MySQLToCsharpSampleConsoleApp/String.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
// Code generated by SqlToCsharp
// ------------------------------------------------------------------------------
// <auto-generated>
// Code Generated by MySQLToCsharp
// </auto-generated>
// ------------------------------------------------------------------------------

using System;
using System.ComponentModel.DataAnnotations;
Expand Down
6 changes: 5 additions & 1 deletion samples/MySQLToCsharpSampleConsoleApp/Weapon.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
// Code generated by SqlToCsharp
// ------------------------------------------------------------------------------
// <auto-generated>
// Code Generated by MySQLToCsharp
// </auto-generated>
// ------------------------------------------------------------------------------

using System;
using System.ComponentModel.DataAnnotations;
Expand Down
8 changes: 4 additions & 4 deletions src/MySQLToCsharp.Parser/Parsers/Parser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ public static MySqlTableDefinition FromQuery(string query, ICreateTableListener
/// <param name="path"></param>
/// <param name="bom"></param>
/// <returns></returns>
public static IEnumerable<MySqlTableDefinition> FromFolder(string path, bool bom = false)
=> FromFolder(path, new CreateTableStatementDetectListener(), new UTF8Encoding(bom));
public static IEnumerable<MySqlTableDefinition> FromFolder(string path, Encoding encoding)
=> FromFolder(path, new CreateTableStatementDetectListener(), encoding);

/// <summary>
/// load query from folder. specify sql file encoding.
Expand All @@ -112,8 +112,8 @@ public static IEnumerable<MySqlTableDefinition> FromFolder(string path, ICreateT
/// <param name="path"></param>
/// <param name="bom"></param>
/// <returns></returns>
public static MySqlTableDefinition FromFile(string path, bool bom = false)
=> FromFile(path, new CreateTableStatementDetectListener(), new UTF8Encoding(bom));
public static MySqlTableDefinition FromFile(string path, Encoding encoding)
=> FromFile(path, new CreateTableStatementDetectListener(), encoding);

/// <summary>
/// load query from file. specify sql file encoding.
Expand Down
34 changes: 28 additions & 6 deletions src/MySQLToCsharp/Generator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,28 @@ public void Save(string className, string text, string outputFolderPath, bool dr
Directory.CreateDirectory(outputFolderPath);
}

Span<byte> byteToWrite = encoding.GetBytes(text);
if (File.Exists(outputFile))
{
var current = File.ReadAllText(outputFile, encoding);
if (text == current)
Span<byte> current = File.ReadAllBytes(outputFile);
if (byteToWrite.SequenceEqual(current))
{
Console.WriteLine($"[-] skipped: {fileName} (no change)");
return;
}
else if (ignoreEol && Equals(text, current))
else
{
Console.WriteLine($"[-] skipped: {fileName} (ignore eol changed)");
return;
// bom must be same before ignore eol
if (current.Length >= 3 && byteToWrite[0] == current[0] && byteToWrite[1] == current[1] && byteToWrite[2] == current[2])
{
// check eol
var readText = encoding.GetString(current);
if (ignoreEol && Equals(text, readText))
{
Console.WriteLine($"[-] skipped: {fileName} (ignore eol changed)");
return;
}
}
}
}
Console.WriteLine($"[o] generate: {fileName}");
Expand Down Expand Up @@ -113,7 +123,7 @@ public string Generate(string @namespace, string className, MySqlTableDefinition
builder.AppendLineIndent4(@"}");
builder.AppendLine("}");

return builder.ToString();
return NormalizeNewLines(builder.ToString());
}

/// <summary>
Expand All @@ -125,6 +135,18 @@ public static string GetClassName(string tableName)
=> tableName.Last() == 's'
? tableName[0..^1] // Foos -> Foo
: tableName;

/// <summary>
/// Normalize NewLine (EndOfLine) with current Operating System.
/// </summary>
/// <param name="content"></param>
/// <returns></returns>
static string NormalizeNewLines(string content)
{
// The generated code may be text with mixed line ending types. (CR + CRLF)
// We need to normalize the line ending type in each Operating Systems. (e.g. Windows=CRLF, Linux/macOS=LF)
return content.Replace("\r\n", "\n").Replace("\n", Environment.NewLine);
}
}

internal static class StringBuilderExtensions
Expand Down
9 changes: 6 additions & 3 deletions src/MySQLToCsharp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using MySQLToCsharp.TypeConverters;
using System;
using System.Linq;
using System.Text;

namespace MySQLToCsharp
{
Expand Down Expand Up @@ -58,7 +59,8 @@ public void File(
PrintDryMessage(dry);
Console.WriteLine($"file executed. Output Directory: {output}");

var table = Parser.FromFile(input, false);
var encoding = new UTF8Encoding(false);
var table = Parser.FromFile(input, encoding);
var resolvedConverter = TypeConverterResolver.Resolve(converter);
var generator = new Generator(resolvedConverter, addbom, ignoreeol);

Expand All @@ -82,10 +84,11 @@ public void Dir(
{
PrintDryMessage(dry);
Console.WriteLine($"dir executed. Output Directory: {output}");

var tables = Parser.FromFolder(input, false).ToArray();
var encoding = new UTF8Encoding(false);
var tables = Parser.FromFolder(input, encoding).ToArray();
var resolvedConverter = TypeConverterResolver.Resolve(converter);
var generator = new Generator(resolvedConverter, addbom, ignoreeol);

foreach (var table in tables)
{
var className = Generator.GetClassName(table.Name);
Expand Down