Skip to content

Commit 1c89086

Browse files
author
Aingeru
committed
sqlite column type adjust
1 parent bdb2fea commit 1c89086

File tree

5 files changed

+94
-65
lines changed

5 files changed

+94
-65
lines changed

SQLServer2SQLite.Cli/Properties/launchSettings.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77
"SQLServer2SQLite.Cli - Copy": {
88
"commandName": "Project",
99
"commandLineArgs": "copy --sourceHost p2zu24z7dc.database.windows.net --sourceDatabase db_deltadesk --sourceUsername Aingeru --sourcePassword Medrano.2015 --targetFile C:/Users/ainge/OneDrive/Escritorio/deltadesk.db"
10+
},
11+
"DeltaDesk - Create": {
12+
"commandName": "Project",
13+
"commandLineArgs": "create --sourceHost p2zu24z7dc.database.windows.net --sourceDatabase db_deltadesk --sourceUsername Aingeru --sourcePassword Medrano.2015 --targetFile K:\\GIT\\repos\\Ark667\\DeltaDesk\\DeltaDesk.App\\wwwroot\\data\\deltadesk.dev.db"
14+
},
15+
"DeltaDesk - Copy": {
16+
"commandName": "Project",
17+
"commandLineArgs": "copy --sourceHost p2zu24z7dc.database.windows.net --sourceDatabase db_deltadesk --sourceUsername Aingeru --sourcePassword Medrano.2015 --targetFile K:\\GIT\\repos\\Ark667\\DeltaDesk\\DeltaDesk.App\\wwwroot\\data\\deltadesk.dev.db"
1018
}
1119
}
1220
}

SQLServer2SQLite.Core/Builders/InsertBuilder.cs

Lines changed: 3 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ public static SqliteCommand BuildSQLiteInsert(TableSchema tableSchema)
3939
if (i < tableSchema.Columns.Count - 1)
4040
sb.Append(", ");
4141

42-
SqliteType dbType = GetSqLiteDbTypeOfColumn(tableSchema.Columns[i]);
42+
SqliteType dbType = ColumnSchema.GetSqLiteDbTypeOfColumn(
43+
tableSchema.Columns[i].ColumnType
44+
);
4345
SqliteParameter prm = new SqliteParameter(
4446
pname,
4547
dbType,
@@ -56,56 +58,5 @@ public static SqliteCommand BuildSQLiteInsert(TableSchema tableSchema)
5658
res.CommandType = CommandType.Text;
5759
return res;
5860
}
59-
60-
// TODO test!
61-
public static SqliteType GetSqLiteDbTypeOfColumn(ColumnSchema cs)
62-
{
63-
if (cs.ColumnType == "tinyint")
64-
return SqliteType.Integer;
65-
if (cs.ColumnType == "int")
66-
return SqliteType.Integer;
67-
if (cs.ColumnType == "smallint")
68-
return SqliteType.Integer;
69-
if (cs.ColumnType == "bigint")
70-
return SqliteType.Integer;
71-
if (cs.ColumnType == "bit")
72-
return SqliteType.Integer;
73-
if (
74-
cs.ColumnType == "nvarchar"
75-
|| cs.ColumnType == "varchar"
76-
|| cs.ColumnType == "text"
77-
|| cs.ColumnType == "ntext"
78-
)
79-
return SqliteType.Text;
80-
if (cs.ColumnType == "float")
81-
return SqliteType.Real;
82-
if (cs.ColumnType == "real")
83-
return SqliteType.Real;
84-
if (cs.ColumnType == "blob")
85-
return SqliteType.Blob;
86-
if (cs.ColumnType == "numeric")
87-
return SqliteType.Real;
88-
if (
89-
cs.ColumnType == "timestamp"
90-
|| cs.ColumnType == "datetime"
91-
|| cs.ColumnType == "datetime2"
92-
|| cs.ColumnType == "date"
93-
|| cs.ColumnType == "time"
94-
|| cs.ColumnType == "datetimeoffset"
95-
)
96-
return SqliteType.Text;
97-
if (cs.ColumnType == "nchar" || cs.ColumnType == "char")
98-
return SqliteType.Text;
99-
if (cs.ColumnType == "uniqueidentifier" || cs.ColumnType == "guid")
100-
return SqliteType.Text;
101-
if (cs.ColumnType == "xml")
102-
return SqliteType.Text;
103-
if (cs.ColumnType == "sql_variant")
104-
return SqliteType.Text;
105-
if (cs.ColumnType == "integer")
106-
return SqliteType.Integer;
107-
108-
throw new InvalidOperationException("Illegal DB type found (" + cs.ColumnType + ")");
109-
}
11061
}
11162
}

SQLServer2SQLite.Core/Builders/TableBuilder.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,9 @@ public static string BuildColumnStatement(ColumnSchema col, TableSchema ts, ref
118118
sb.Append("integer");
119119
else
120120
{
121-
sb.Append(col.ColumnType);
121+
sb.Append(col.SqLiteColumnType);
122122
}
123+
123124
if (col.Length > 0)
124125
sb.Append("(" + col.Length + ")");
125126
}
@@ -131,14 +132,9 @@ public static string BuildColumnStatement(ColumnSchema col, TableSchema ts, ref
131132

132133
string defval = StripParens(col.DefaultValue);
133134
defval = DiscardNational(defval);
134-
//_log.Debug("DEFAULT VALUE BEFORE [" + col.DefaultValue + "] AFTER [" + defval + "]");
135+
135136
if (!string.IsNullOrEmpty(defval) && defval.ToUpper().Contains("GETDATE"))
136137
{
137-
//_log.Debug(
138-
// "converted SQL Server GETDATE() to CURRENT_TIMESTAMP for column ["
139-
// + col.ColumnName
140-
// + "]"
141-
//);
142138
sb.Append(" DEFAULT (CURRENT_TIMESTAMP)");
143139
}
144140
else if (!string.IsNullOrEmpty(defval) && IsValidDefaultValue(defval))

SQLServer2SQLite.Core/Models/ColumnSchema.cs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
using Microsoft.Data.Sqlite;
2+
using System;
3+
14
namespace SqlServer2SqLite.Core.Models
25
{
36
public class ColumnSchema
@@ -15,5 +18,76 @@ public class ColumnSchema
1518
public bool IsIdentity { get; set; }
1619

1720
public bool? IsCaseSensitivite { get; set; }
21+
22+
public string SqLiteColumnType
23+
{
24+
get
25+
{
26+
switch (GetSqLiteDbTypeOfColumn(ColumnType))
27+
{
28+
case SqliteType.Integer:
29+
return "INTEGER";
30+
case SqliteType.Real:
31+
return "REAL";
32+
case SqliteType.Text:
33+
return "TEXT";
34+
case SqliteType.Blob:
35+
return "BLOB";
36+
default:
37+
return null;
38+
}
39+
}
40+
}
41+
42+
// TODO test!
43+
public static SqliteType GetSqLiteDbTypeOfColumn(string columnType)
44+
{
45+
if (columnType == "tinyint")
46+
return SqliteType.Integer;
47+
if (columnType == "int")
48+
return SqliteType.Integer;
49+
if (columnType == "smallint")
50+
return SqliteType.Integer;
51+
if (columnType == "bigint")
52+
return SqliteType.Integer;
53+
if (columnType == "bit")
54+
return SqliteType.Integer;
55+
if (
56+
columnType == "nvarchar"
57+
|| columnType == "varchar"
58+
|| columnType == "text"
59+
|| columnType == "ntext"
60+
)
61+
return SqliteType.Text;
62+
if (columnType == "float")
63+
return SqliteType.Real;
64+
if (columnType == "real")
65+
return SqliteType.Real;
66+
if (columnType == "blob")
67+
return SqliteType.Blob;
68+
if (columnType == "numeric")
69+
return SqliteType.Real;
70+
if (
71+
columnType == "timestamp"
72+
|| columnType == "datetime"
73+
|| columnType == "datetime2"
74+
|| columnType == "date"
75+
|| columnType == "time"
76+
|| columnType == "datetimeoffset"
77+
)
78+
return SqliteType.Text;
79+
if (columnType == "nchar" || columnType == "char")
80+
return SqliteType.Text;
81+
if (columnType == "uniqueidentifier" || columnType == "guid")
82+
return SqliteType.Text;
83+
if (columnType == "xml")
84+
return SqliteType.Text;
85+
if (columnType == "sql_variant")
86+
return SqliteType.Text;
87+
if (columnType == "integer")
88+
return SqliteType.Integer;
89+
90+
throw new InvalidOperationException("Illegal DB type found (" + columnType + ")");
91+
}
1892
}
1993
}

SQLServer2SQLite.Tests/Builders/TableBuilder.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ private static TableSchema GetTableSchema() =>
2626
new ColumnSchema()
2727
{
2828
ColumnName = "ColumnName1",
29-
ColumnType = "ColumnType1",
29+
ColumnType = "int",
3030
Length = 2,
3131
IsNullable = true,
3232
DefaultValue = "10",
@@ -36,7 +36,7 @@ private static TableSchema GetTableSchema() =>
3636
new ColumnSchema()
3737
{
3838
ColumnName = "ColumnName2",
39-
ColumnType = "ColumnType2",
39+
ColumnType = "varchar",
4040
Length = 5,
4141
IsNullable = false,
4242
DefaultValue = null,
@@ -96,25 +96,25 @@ public void BuildCreateTableQuery()
9696
Assert.That(
9797
Core.Builders.TableBuilder.BuildCreateTableQuery(GetTableSchema()),
9898
Is.EqualTo(
99-
"CREATE TABLE [TableName1] (\n\t[ColumnName1]\tinteger DEFAULT 10,\n\t[ColumnName2]\tColumnType2(5) NOT NULL COLLATE NOCASE,\n PRIMARY KEY ([PrimaryKey1], [PrimaryKey2])\n,\n FOREIGN KEY ([ColumnName2])\n REFERENCES [ForeignTableName1]([ForeignColumnName1]),\n FOREIGN KEY ([ColumnName3])\n REFERENCES [ForeignTableName4]([ForeignColumnName4])\n);\nCREATE UNIQUE INDEX [TableName1_TableName2]\nON [TableName1]\n([ColumnName1], [ColumnName2] DESC);\nCREATE INDEX [TableName1_TableName3]\nON [TableName1]\n([ColumnName4]);\n"
99+
"CREATE TABLE [TableName1] (\n\t[ColumnName1]\tinteger DEFAULT 10,\n\t[ColumnName2]\tTEXT(5) NOT NULL COLLATE NOCASE,\n PRIMARY KEY ([PrimaryKey1], [PrimaryKey2])\n,\n FOREIGN KEY ([ColumnName2])\n REFERENCES [ForeignTableName1]([ForeignColumnName1]),\n FOREIGN KEY ([ColumnName3])\n REFERENCES [ForeignTableName4]([ForeignColumnName4])\n);\nCREATE UNIQUE INDEX [TableName1_TableName2]\nON [TableName1]\n([ColumnName1], [ColumnName2] DESC);\nCREATE INDEX [TableName1_TableName3]\nON [TableName1]\n([ColumnName4]);\n"
100100
)
101101
);
102102
}
103103

104104
[Test]
105105
public void BuildColumnStatement()
106106
{
107-
var b = true;
107+
var primaryKey = true;
108108

109109
Assert.That(
110110
Core.Builders.TableBuilder.BuildColumnStatement(
111111
GetColumnSchema(),
112112
GetTableSchema(),
113-
ref b
113+
ref primaryKey
114114
),
115115
Is.EqualTo("\t[ColumnName1]\tinteger DEFAULT 10")
116116
);
117-
Assert.That(!b, Is.False);
117+
Assert.That(!primaryKey, Is.False);
118118
}
119119

120120
[Test]

0 commit comments

Comments
 (0)