소스 검색

Merge pull request #12 from LithWang/master

2.2.0-preview2
Lith 7 달 전
부모
커밋
a2c1dbd537

+ 9 - 0
doc/ReleaseLog.md

@@ -1,5 +1,14 @@
 # Vitorm ReleaseLog
 
+
+-----------------------
+# 2.2.0
+- [Vitorm.Data] rename DataSource.LoadDataProvider to AddDataProvider
+- [Vitorm.Sqlite]
+    - support autoincrement key
+    - identity key will start from 1 after truncate table
+
+
 -----------------------
 # 2.1.2
 - [Vitorm.Data] add DataSource class, change methods to instance from static

+ 11 - 2
src/Versions.props

@@ -1,6 +1,15 @@
 <Project>
     <PropertyGroup>
-        <Version>2.2.0-preview</Version>
-        <VitLinq_Version>[3.1.2, 3.2.0)</VitLinq_Version>
+        <Version>2.2.0-preview2</Version>
+        <VitLinq_Version>[3.1.3-preview, 3.2.0)</VitLinq_Version>
+    </PropertyGroup>
+
+    <PropertyGroup>
+        <Authors>Lith</Authors>
+        <PackageProjectUrl>https://github.com/Vit-Orm/Vitorm</PackageProjectUrl>
+    </PropertyGroup>
+
+    <PropertyGroup>
+        <DocumentationFile>bin\Debug\$(TargetFramework)\$(MSBuildProjectName).xml</DocumentationFile>
     </PropertyGroup>
 </Project>

+ 1 - 1
src/Vitorm.Data/Data.DataProviderCache.cs

@@ -15,7 +15,7 @@ namespace Vitorm
             /// </summary>
             public readonly string name;
             /// <summary>
-            /// separate by comma, for example: "Vitorm.Model.Mysql,Vitorm.Model.Sqlserver"
+            /// separate by comma, for example: "Vitorm.Model.MySql,Vitorm.Model.SqlServer"
             /// </summary>
             public readonly string @namespace;
             private readonly List<string> classFullNamePrefixList;

+ 5 - 5
src/Vitorm.Data/Data.DataSource.cs

@@ -21,13 +21,13 @@ namespace Vitorm
             /// Data.Init("appsettings.Development.json")
             /// </summary>
             /// <param name="appsettingsFileName"></param>
-            public DataSource LoadDataProviders(string appsettingsFileName)
+            public DataSource AddDataProviders(string appsettingsFileName)
             {
-                LoadDataProviders(new JsonFile(appsettingsFileName));
+                AddDataProviders(new JsonFile(appsettingsFileName));
                 return this;
             }
 
-            public DataSource LoadDataProviders(JsonFile json, string configPath = "Vitorm.Data")
+            public DataSource AddDataProviders(JsonFile json, string configPath = "Vitorm.Data")
             {
                 var dataProviderConfigs = json.GetByPath<List<Dictionary<string, object>>>(configPath);
                 return LoadDataProviders(dataProviderConfigs);
@@ -43,7 +43,7 @@ namespace Vitorm
                 return this;
             }
 
-            public bool LoadDataProvider(Dictionary<string, object> dataProviderConfig)
+            public bool AddDataProvider(Dictionary<string, object> dataProviderConfig)
             {
                 var provider = CreateDataProvider(dataProviderConfig);
                 if (provider == null) return false;
@@ -63,7 +63,7 @@ namespace Vitorm
             }
 
 
-            #region LoadDataProvider
+            #region DataProvider
 
             public IDataProvider DataProvider<Entity>() => DataProvider(typeof(Entity));
             public IDataProvider DataProvider(Type entityType)

+ 3 - 3
src/Vitorm.Data/Data.cs

@@ -33,7 +33,7 @@ namespace Vitorm
         public static void Init(JsonFile json)
         {
             // #1 load dataProviders
-            dataSource.LoadDataProviders(json);
+            dataSource.AddDataProviders(json);
 
 
             // #2 load DefaultEntityLoaders
@@ -59,12 +59,12 @@ namespace Vitorm
             });
         }
 
-        public static bool LoadDataProvider(Dictionary<string, object> dataProviderConfig) => dataSource.LoadDataProvider(dataProviderConfig);
+        public static bool AddDataProvider(Dictionary<string, object> dataProviderConfig) => dataSource.AddDataProvider(dataProviderConfig);
 
         public static void ClearDataProviders(Predicate<DataProviderCache> predicate = null) => dataSource.ClearDataProviders(predicate);
 
 
-        #region LoadDataProvider
+        #region DataProvider
 
         public static IDataProvider DataProvider<Entity>() => dataSource.DataProvider<Entity>();
         public static IDataProvider DataProvider(Type entityType) => dataSource.DataProvider(entityType);

+ 4 - 3
src/Vitorm.Data/Vitorm.Data.csproj

@@ -11,12 +11,13 @@
     </PropertyGroup>
 
     <PropertyGroup>
-        <Authors>Lith</Authors>
         <Description>Data access for Database</Description>
-        <PackageProjectUrl>https://github.com/Vit-Orm/Vitorm</PackageProjectUrl>
+        <PackageTags>orm vitorm database mysql sqlserver sqlite clickhouse elasticsearch</PackageTags>
+    </PropertyGroup>
+
+    <PropertyGroup>
         <PackageIcon>vitorm_logo_v1.png</PackageIcon>
         <PackageReadmeFile>README.md</PackageReadmeFile>
-        <PackageTags>orm vitorm database mysql sqlserver sqlite clickhouse elasticsearch</PackageTags>
     </PropertyGroup>
 
     <ItemGroup>

+ 4 - 3
src/Vitorm.EntityGenerate/Vitorm.EntityGenerate.csproj

@@ -11,12 +11,13 @@
     </PropertyGroup>
 
     <PropertyGroup>
-        <Authors>Lith</Authors>
         <Description>Generage Entity Type from Database</Description>
-        <PackageProjectUrl>https://github.com/Vit-Orm/Vitorm</PackageProjectUrl>
+        <PackageTags>orm vitorm database mysql sqlserver sqlite Entity DbFirst</PackageTags>
+    </PropertyGroup>
+
+    <PropertyGroup>
         <PackageIcon>vitorm_logo_v1.png</PackageIcon>
         <PackageReadmeFile>README.md</PackageReadmeFile>
-        <PackageTags>orm vitorm database mysql sqlserver sqlite Entity DbFirst</PackageTags>
     </PropertyGroup>
 
     <ItemGroup>

+ 4 - 3
src/Vitorm.MySql/Vitorm.MySql.csproj

@@ -11,12 +11,13 @@
     </PropertyGroup>
 
     <PropertyGroup>
-        <Authors>Lith</Authors>
         <Description>orm for MySql</Description>
-        <PackageProjectUrl>https://github.com/Vit-Orm/Vitorm</PackageProjectUrl>
+        <PackageTags>orm vitorm database mysql</PackageTags>
+    </PropertyGroup>
+
+    <PropertyGroup>
         <PackageIcon>vitorm_logo_v1.png</PackageIcon>
         <PackageReadmeFile>README.md</PackageReadmeFile>
-        <PackageTags>orm vitorm database mysql</PackageTags>
     </PropertyGroup>
 
     <ItemGroup>

+ 4 - 3
src/Vitorm.SqlServer/Vitorm.SqlServer.csproj

@@ -11,12 +11,13 @@
     </PropertyGroup>
 
     <PropertyGroup>
-        <Authors>Lith</Authors>
         <Description>orm for SqlServer</Description>
-        <PackageProjectUrl>https://github.com/Vit-Orm/Vitorm</PackageProjectUrl>
+        <PackageTags>orm vitorm database sqlserver mssql</PackageTags>
+    </PropertyGroup>
+
+    <PropertyGroup>
         <PackageIcon>vitorm_logo_v1.png</PackageIcon>
         <PackageReadmeFile>README.md</PackageReadmeFile>
-        <PackageTags>orm vitorm database sqlserver mssql</PackageTags>
     </PropertyGroup>
 
     <ItemGroup>

+ 36 - 9
src/Vitorm.Sqlite/SqlTranslateService.cs

@@ -158,7 +158,7 @@ namespace Vitorm.Sqlite
         {
             /* //sql
 CREATE TABLE IF NOT EXISTS "User" (
-  id int PRIMARY KEY NOT NULL,
+  id integer PRIMARY KEY autoincrement NOT NULL ,
   name varchar(100) DEFAULT NULL,
   birth date DEFAULT NULL,
   fatherId int DEFAULT NULL,
@@ -185,16 +185,18 @@ CREATE TABLE IF NOT EXISTS {DelimitTableName(entityDescriptor)} (
                 var defaultValue = column.isNullable ? "default null" : "";
                 if (column.isIdentity)
                 {
-                    throw new NotSupportedException("identity for Sqlite is not supported yet.");
+                    var type = TypeUtil.GetUnderlyingType(column.type);
+                    if (type == typeof(Guid)) { }
+                    else defaultValue = "autoincrement";
+                    //throw new NotSupportedException("identity for Sqlite is not supported yet.");
                 }
 
                 /*
-                  name  type    nullable        defaultValue    primaryKey
-                  id    int     not null/null   default null    primary key
-
+                  name  type    primaryKey      defaultValue    nullable
+                  id    int     primary key     default null    not null/null
+                                                autoincrement
                  */
-
-                return $"  {DelimitIdentifier(column.columnName)}  {columnDbType}  {(column.isNullable ? "null" : "not null")}  {defaultValue}  {(column.isKey ? "primary key" : "")}";
+                return $"  {DelimitIdentifier(column.columnName)}  {columnDbType}  {(column.isKey ? "primary key" : "")}  {defaultValue}  {(column.isNullable ? "null" : "not null")}";
             }
         }
 
@@ -247,8 +249,33 @@ CREATE TABLE IF NOT EXISTS {DelimitTableName(entityDescriptor)} (
         }
         public override string PrepareTruncate(IEntityDescriptor entityDescriptor)
         {
-            // delete from 'User';
-            return $@"delete from {DelimitTableName(entityDescriptor)};";
+            // delete from 'User'; DELETE from sqlite_sequence WHERE name = "user";
+            return $@"delete from {DelimitTableName(entityDescriptor)}; delete from sqlite_sequence where name = {DelimitTableName(entityDescriptor)};";
+        }
+
+        public override (string sql, Func<object, Dictionary<string, object>> GetSqlParams) PrepareAdd(SqlTranslateArgument arg, EAddType addType)
+        {
+            if (addType == EAddType.identityKey)
+            {
+                // insert into "user"(name,fatherId,motherId) values('lith',1,1); select last_insert_rowid();
+
+                var entityDescriptor = arg.entityDescriptor;
+                var (columnNames, sqlColumnParams, GetSqlParams) = PrepareAdd_Columns(arg, entityDescriptor.columns);
+                string sql = $@"insert into {DelimitTableName(entityDescriptor)}({string.Join(",", columnNames)}) values({string.Join(",", sqlColumnParams)});";
+
+                // get generated id
+                sql += "select last_insert_rowid();";
+                return (sql, GetSqlParams);
+            }
+            else
+            {
+                // insert into "user"(name,fatherId,motherId) values('lith',1,1);
+
+                var entityDescriptor = arg.entityDescriptor;
+                var (columnNames, sqlColumnParams, GetSqlParams) = PrepareAdd_Columns(arg, entityDescriptor.allColumns);
+                string sql = $@"insert into {DelimitTableName(entityDescriptor)}({string.Join(",", columnNames)}) values({string.Join(",", sqlColumnParams)});";
+                return (sql, GetSqlParams);
+            }
         }
 
     }

+ 4 - 3
src/Vitorm.Sqlite/Vitorm.Sqlite.csproj

@@ -11,12 +11,13 @@
     </PropertyGroup>
 
     <PropertyGroup>
-        <Authors>Lith</Authors>
         <Description>orm for Sqlite</Description>
-        <PackageProjectUrl>https://github.com/Vit-Orm/Vitorm</PackageProjectUrl>
+        <PackageTags>orm vitorm database sqlite</PackageTags>
+    </PropertyGroup>
+
+    <PropertyGroup>
         <PackageIcon>vitorm_logo_v1.png</PackageIcon>
         <PackageReadmeFile>README.md</PackageReadmeFile>
-        <PackageTags>orm vitorm database sqlite</PackageTags>
     </PropertyGroup>
 
     <ItemGroup>

+ 4 - 3
src/Vitorm/Vitorm.csproj

@@ -11,12 +11,13 @@
     </PropertyGroup>
 
     <PropertyGroup>
-        <Authors>Lith</Authors>
         <Description>Vitorm : simple orm</Description>
-        <PackageProjectUrl>https://github.com/Vit-Orm/Vitorm</PackageProjectUrl>
+        <PackageTags>orm vitorm database mysql sqlserver sqlite clickhouse elasticsearch</PackageTags>
+    </PropertyGroup>
+
+    <PropertyGroup>
         <PackageIcon>vitorm_logo_v1.png</PackageIcon>
         <PackageReadmeFile>README.md</PackageReadmeFile>
-        <PackageTags>orm vitorm database mysql sqlserver sqlite clickhouse elasticsearch</PackageTags>
     </PropertyGroup>
 
     <ItemGroup>

+ 14 - 7
test/Vitorm.Data.MsTest/CommonTest/Sqlite_Test.cs

@@ -6,6 +6,9 @@ namespace Vitorm.MsTest.Sqlite
 {
     public class User : Vitorm.MsTest.CommonTest.UserBase
     {
+        [System.ComponentModel.DataAnnotations.Key]
+        [System.ComponentModel.DataAnnotations.Schema.DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
+        public override int id { get; set; }
     }
 }
 
@@ -61,17 +64,21 @@ namespace Vitorm.MsTest.CommonTest
             dbContext.TryCreateTable<User>();
 
             var users = new List<User> {
-                    new User { id=1, name="u146", fatherId=4, motherId=6 },
-                    new User { id=2, name="u246", fatherId=4, motherId=6 },
-                    new User { id=3, name="u356", fatherId=5, motherId=6 },
-                    new User { id=4, name="u400" },
-                    new User { id=5, name="u500" },
-                    new User { id=6, name="u600" },
+                    new User { name="u146", fatherId=4, motherId=6 },
+                    new User { name="u246", fatherId=4, motherId=6 },
+                    new User { name="u356", fatherId=5, motherId=6 },
+                    new User { name="u400" },
+                    new User { name="u500" },
+                    new User { name="u600" },
                 };
-            users.ForEach(user => { user.birth = DateTime.Parse("2021-01-01 00:00:00").AddHours(user.id); });
 
             dbContext.AddRange(users);
 
+
+            users.ForEach(user => { user.birth = DateTime.Parse("2021-01-01 00:00:00").AddHours(user.id); });
+
+            dbContext.UpdateRange(users);
+
             WaitForUpdate();
 
         }

+ 15 - 0
test/Vitorm.Sqlite.MsTest/CommonTest/Truncate_Test.cs

@@ -26,6 +26,21 @@ namespace Vitorm.MsTest.CommonTest
                 var count = dbContext.Query<User>().Count();
                 Assert.AreEqual(0, count);
             }
+
+
+            var user = User.NewUser(id: 1, forAdd: true);
+            dbContext.Add(user);
+
+            DataSource.WaitForUpdate();
+            // assert
+            {
+                Assert.AreEqual(1, user.id);
+
+                var list = dbContext.Query<User>().ToList();
+                Assert.AreEqual(1, list.Count);
+                Assert.AreEqual(1, list[0].id);
+            }
+
         }
 
 

+ 14 - 9
test/Vitorm.Sqlite.MsTest/DataSource.cs

@@ -13,6 +13,7 @@ namespace Vitorm.MsTest
 
         [System.ComponentModel.DataAnnotations.Key]
         [System.ComponentModel.DataAnnotations.Schema.Column("userId")]
+        [System.ComponentModel.DataAnnotations.Schema.DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
         public int id { get; set; }
         [System.ComponentModel.DataAnnotations.Schema.Column("userName")]
         public string name { get; set; }
@@ -29,7 +30,7 @@ namespace Vitorm.MsTest
         public string test { get; set; }
 
 
-        public static User NewUser(int id, bool forAdd = false) => new User { id = id, name = "testUser" + id };
+        public static User NewUser(int id, bool forAdd = false) => new User { id = forAdd ? 0 : id, name = "testUser" + id };
 
         public static List<User> NewUsers(int startId, int count = 1, bool forAdd = false)
         {
@@ -42,13 +43,14 @@ namespace Vitorm.MsTest
     {
         [System.ComponentModel.DataAnnotations.Key]
         [System.ComponentModel.DataAnnotations.Schema.Column("classId")]
+        [System.ComponentModel.DataAnnotations.Schema.DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
         public int id { get; set; }
         [System.ComponentModel.DataAnnotations.Schema.Column("className")]
         public string name { get; set; }
 
         public static List<UserClass> NewClasses(int startId, int count = 1)
         {
-            return Enumerable.Range(startId, count).Select(id => new UserClass { id = id, name = "class" + id }).ToList();
+            return Enumerable.Range(startId, count).Select(id => new UserClass { id = 0, name = "class" + id }).ToList();
         }
     }
 
@@ -84,20 +86,23 @@ namespace Vitorm.MsTest
                 dbContext.TryCreateTable<User>();
 
                 var users = new List<User> {
-                    new User { id=1, name="u146", fatherId=4, motherId=6 },
-                    new User { id=2, name="u246", fatherId=4, motherId=6 },
-                    new User { id=3, name="u356", fatherId=5, motherId=6 },
-                    new User { id=4, name="u400" },
-                    new User { id=5, name="u500" },
-                    new User { id=6, name="u600" },
+                    new User {  name="u146", fatherId=4, motherId=6 },
+                    new User {  name="u246", fatherId=4, motherId=6 },
+                    new User {  name="u356", fatherId=5, motherId=6 },
+                    new User {  name="u400" },
+                    new User {  name="u500" },
+                    new User {  name="u600" },
                 };
+
+                dbContext.AddRange(users);
+
                 users.ForEach(user =>
                 {
                     user.birth = DateTime.Parse("2021-01-01 00:00:00").AddHours(user.id);
                     user.classId = user.id % 2 + 1;
                 });
 
-                dbContext.AddRange(users);
+                dbContext.UpdateRange(users);
             }
             #endregion