Lith пре 11 месеци
родитељ
комит
0558314e3e

+ 2 - 2
Publish/DevOps3/environment/readme.md

@@ -1,6 +1,6 @@
 
-# DevOps 3.2
-> 2024-06-12
+# DevOps 3.3
+> 2024-06-18
 
 # build-bash
 extra steps when building, all sh files could be remove if not needed.

+ 9 - 9
Publish/DevOps3/jenkins-bash/CICD.ki.git_Multibranch.deploy.jenkinsfile

@@ -17,23 +17,23 @@ pipeline {
         envName = readFile("Publish/DevOps3/environment/env.envName.txt")
         versionSuffix = "-${envName}${env.build_number}"
 
-        //basePath = "/root/docker-cache/jenkins/jenkins_home/workspace/${APPNAME}/${envName}/${env.BRANCH_NAME}/${env.build_number}"
+        // basePath = "/root/docker-cache/jenkins/jenkins_home/workspace/${APPNAME}/${envName}/${env.BRANCH_NAME}/${env.build_number}"
         basePath = "${env.WORKSPACE}"
 
-        NUGET_PATH = "/root/docker-cache/jenkins/jenkins_home/workspace/.nuget"
+        // NUGET_PATH = "/root/docker-cache/jenkins/jenkins_home/workspace/.nuget"
+        NUGET_PATH = credentials("NUGET_PATH")
+        NUGET_SERVER = credentials("NUGET_SERVER")
+        NUGET_KEY = credentials("NUGET_KEY")
 
-        NUGET_SERVER = "http://nuget.lith.cloud:8"
-        //NUGET_KEY = " "
-        NUGET_KEY = credentials("nuget_key")
-
-        DOCKER_ImagePrefix = "docker.lith.cloud:8/${envName}/"
+        DOCKER_SERVER = credentials("DOCKER_SERVER")
+        DOCKER_ImagePrefix = "${DOCKER_SERVER}/${envName}/"
         DOCKER_Buildx = false
         DOCKER_USERNAME = " "
         DOCKER_PASSWORD = " "
 
         // set to "  "  if want to skip save releaseFiles to WebDav
-        WebDav_BaseUrl = "https://pan.lith.cloud:4/remote.php/dav/files/release/releaseFiles/ki_jenkins"
-        // "username:pwd"
+        WebDav_BaseUrl = credentials("WebDav_BaseUrl")
+        // WebDav_User = "username:pwd"
         WebDav_User = credentials("WebDav_User")
 
         build_crossPlatform = "no"

+ 3 - 4
src/Vitorm.MySql/SqlTransactionScope.cs

@@ -1,9 +1,8 @@
-using System;
-using System.Data;
+using System.Data;
 
-using Vitorm.Extensions;
 using Vitorm.Sql;
 using Vitorm.Sql.Transaction;
+
 using SqlTransaction = MySqlConnector.MySqlTransaction;
 
 namespace Vitorm.MySql
@@ -30,7 +29,7 @@ namespace Vitorm.MySql
                 if (dbConnection.State != ConnectionState.Open) dbConnection.Open();
 
                 originalTransaction = dbConnection.BeginTransaction();
-                dbConnection.Execute("SET autocommit=0;", transaction: originalTransaction);
+                dbContext.ExecuteWithTransaction("SET autocommit=0;", transaction: originalTransaction);
                 transactionWrap = new DbTransactionWrap(originalTransaction);
             }
             else

+ 12 - 12
src/Vitorm.MySql/SqlTransactionScope_Command.cs

@@ -4,7 +4,6 @@ using Vitorm.Sql;
 using Vitorm.Sql.Transaction;
 using System.Collections.Generic;
 using static Vitorm.Sql.Transaction.DbTransactionWrap;
-using Vitorm.Extensions;
 
 namespace Vitorm.MySql
 {
@@ -26,7 +25,7 @@ namespace Vitorm.MySql
                 var dbConnection = dbContext.dbConnection;
                 if (dbConnection.State != ConnectionState.Open) dbConnection.Open();
 
-                dbTransactionWrap = new DbTransactionWrap_Command(dbConnection);
+                dbTransactionWrap = new DbTransactionWrap_Command(dbContext);
                 return dbTransactionWrap;
 
             }
@@ -60,13 +59,13 @@ namespace Vitorm.MySql
         public class DbTransactionWrap_Command : IDbTransaction
         {
             public virtual System.Data.IsolationLevel IsolationLevel => default;
-            public IDbConnection Connection { get; protected set; }
-
+            public IDbConnection Connection => dbContext.dbConnection;
+            SqlDbContext dbContext;
             public virtual ETransactionState TransactionState { get; protected set; } = ETransactionState.Active;
 
-            public DbTransactionWrap_Command(IDbConnection connection)
+            public DbTransactionWrap_Command(SqlDbContext dbContext)
             {
-                this.Connection = connection;
+                this.dbContext = dbContext;
                 Execute($"START TRANSACTION; SET autocommit=0;");
             }
 
@@ -92,30 +91,31 @@ namespace Vitorm.MySql
             }
             public DbTransactionWrapSavePoint BeginSavePoint(string savePoint)
             {
-                return new DbTransactionWrapSavePoint(Connection, savePoint);
+                return new DbTransactionWrapSavePoint(dbContext, savePoint);
             }
             protected virtual void Execute(string sql)
             {
-                Connection.Execute(sql);
+                dbContext.ExecuteWithTransaction(sql);
             }
         }
 
         public class DbTransactionWrapSavePoint : IDbTransaction
         {
             public virtual System.Data.IsolationLevel IsolationLevel => default;
-            public IDbConnection Connection { get; protected set; }
 
+            public IDbConnection Connection => dbContext.dbConnection;
+            SqlDbContext dbContext;
             public virtual ETransactionState TransactionState { get; protected set; } = ETransactionState.Active;
             protected string savePointName;
 
 
             protected virtual void Execute(string sql)
             {
-                Connection.Execute(sql);
+                dbContext.ExecuteWithTransaction(sql);
             }
-            public DbTransactionWrapSavePoint(IDbConnection connection, string savePointName)
+            public DbTransactionWrapSavePoint(SqlDbContext dbContext, string savePointName)
             {
-                this.Connection = connection;
+                this.dbContext = dbContext;
                 this.savePointName = savePointName;
                 Execute($"SAVEPOINT {savePointName};");
             }

+ 2 - 2
src/Vitorm.MySql/SqlTranslateService.cs

@@ -173,7 +173,7 @@ CREATE TABLE user (
             entityDescriptor.columns?.ForEach(column => sqlFields.Add(GetColumnSql(column)));
 
             return $@"
-CREATE TABLE {DelimitIdentifier(entityDescriptor.tableName)} (
+CREATE TABLE {DelimitTableName(entityDescriptor)} (
 {string.Join(",\r\n  ", sqlFields)}
 )";
 
@@ -250,7 +250,7 @@ CREATE TABLE {DelimitIdentifier(entityDescriptor.tableName)} (
             #endregion
 
             // #3 build sql
-            string sql = $@"insert into {DelimitIdentifier(entityDescriptor.tableName)}({string.Join(",", columnNames)}) values({string.Join(",", valueParams)});";
+            string sql = $@"insert into {DelimitTableName(entityDescriptor)}({string.Join(",", columnNames)}) values({string.Join(",", valueParams)});";
             sql += "select last_insert_id();";
             return (sql, GetSqlParams);
         }

+ 1 - 3
src/Vitorm.MySql/TranslateService/ExecuteDeleteTranslateService.cs

@@ -23,14 +23,12 @@ delete from User where id in ( SELECT id FROM tmp );
 
             var NewLine = "\r\n";
             var keyName = entityDescriptor.keyName;
-            var tableName = entityDescriptor.tableName;
-
 
             var sql = $"WITH tmp AS ( {NewLine}";
             sql += sqlInner;
 
             sql += $"{NewLine}){NewLine}";
-            sql += $"delete from {sqlTranslator.DelimitIdentifier(tableName)} ";
+            sql += $"delete from {sqlTranslator.DelimitTableName(entityDescriptor)} ";
 
             sql += $"{NewLine}where {sqlTranslator.DelimitIdentifier(keyName)} in ( SELECT {sqlTranslator.DelimitIdentifier(keyName)} FROM tmp ); {NewLine}";
 

+ 1 - 2
src/Vitorm.MySql/TranslateService/ExecuteUpdateTranslateService.cs

@@ -31,14 +31,13 @@ where t0.id = tmp.id ;
 
             var NewLine = "\r\n";
             var keyName = entityDescriptor.keyName;
-            var tableName = entityDescriptor.tableName;
 
 
             var sql = $"WITH tmp AS ( {NewLine}";
             sql += sqlInner;
 
             sql += $"{NewLine}){NewLine}";
-            sql += $"UPDATE {sqlTranslator.DelimitIdentifier(tableName)} t0, tmp{NewLine}";
+            sql += $"UPDATE {sqlTranslator.DelimitTableName(entityDescriptor)} t0, tmp{NewLine}";
             sql += $"Set ";
 
             var sqlToUpdateCols = columnsToUpdate

+ 1 - 2
src/Vitorm.SqlServer/SqlTranslate/ExecuteDeleteTranslateService.cs

@@ -23,14 +23,13 @@ delete from User where id in ( SELECT id FROM tmp );
 
             var NewLine = "\r\n";
             var keyName = entityDescriptor.keyName;
-            var tableName = entityDescriptor.tableName;
 
 
             var sql = $"WITH tmp AS ( {NewLine}";
             sql += sqlInner;
 
             sql += $"{NewLine}){NewLine}";
-            sql += $"delete from {sqlTranslator.DelimitIdentifier(tableName)} ";
+            sql += $"delete from {sqlTranslator.DelimitTableName(entityDescriptor)} ";
 
             sql += $"{NewLine}where {sqlTranslator.DelimitIdentifier(keyName)} in ( SELECT {sqlTranslator.DelimitIdentifier(keyName)} FROM tmp ); {NewLine}";
 

+ 2 - 3
src/Vitorm.SqlServer/SqlTranslate/ExecuteUpdateTranslateService.cs

@@ -33,14 +33,13 @@ UPDATE [User]
 
             var NewLine = "\r\n";
             var keyName = entityDescriptor.keyName;
-            var tableName = entityDescriptor.tableName;
 
 
             var sql = $"WITH tmp AS ( {NewLine}";
             sql += sqlInner;
 
             sql += $"{NewLine}){NewLine}";
-            sql += $"UPDATE {sqlTranslator.DelimitIdentifier(tableName)}{NewLine}";
+            sql += $"UPDATE {sqlTranslator.DelimitTableName(entityDescriptor)}{NewLine}";
             sql += $"Set ";
 
             var sqlToUpdateCols = columnsToUpdate
@@ -49,7 +48,7 @@ UPDATE [User]
 
             sql += string.Join(",", sqlToUpdateCols);
 
-            sql += $"{NewLine}from {sqlTranslator.DelimitIdentifier(tableName)} t0";
+            sql += $"{NewLine}from {sqlTranslator.DelimitTableName(entityDescriptor)} t0";
             sql += $"{NewLine}inner join tmp on t0.{sqlTranslator.DelimitIdentifier(keyName)}=tmp.{sqlTranslator.DelimitIdentifier(keyName)}";
 
             return sql;

+ 15 - 2
src/Vitorm.SqlServer/SqlTranslateService.cs

@@ -7,6 +7,7 @@ using Vit.Extensions.Linq_Extensions;
 using Vit.Linq.ExpressionTree.ComponentModel;
 
 using Vitorm.Entity;
+using Vitorm.Entity.Dapper;
 using Vitorm.Sql;
 using Vitorm.Sql.SqlTranslate;
 using Vitorm.SqlServer.TranslateService;
@@ -48,6 +49,14 @@ namespace Vitorm.SqlServer
         /// </returns>
         public override string EscapeIdentifier(string identifier) => identifier.Replace("[", "\"[").Replace("]", "\"]");
 
+        public override string DelimitTableName(IEntityDescriptor entityDescriptor)
+        {
+            if (entityDescriptor.schema == null) return DelimitIdentifier(entityDescriptor.tableName);
+
+            return $"{DelimitIdentifier(entityDescriptor.schema)}.{DelimitIdentifier(entityDescriptor.tableName)}";
+        }
+
+
 
         #region EvalExpression
         /// <summary>
@@ -145,10 +154,14 @@ namespace Vitorm.SqlServer
             }
 
             return base.EvalExpression(arg, data);
-        }
+}
+
         #endregion
 
 
+    
+
+
         #region PrepareCreate
         public override string PrepareCreate(IEntityDescriptor entityDescriptor)
         {
@@ -170,7 +183,7 @@ CREATE TABLE user (
             entityDescriptor.columns?.ForEach(column => sqlFields.Add(GetColumnSql(column)));
 
             return $@"
-CREATE TABLE [dbo].{DelimitIdentifier(entityDescriptor.tableName)} (
+CREATE TABLE {DelimitTableName(entityDescriptor)} (
 {string.Join(",\r\n  ", sqlFields)}
 )";
 

+ 2 - 2
src/Vitorm.Sqlite/SqlTranslateService.cs

@@ -154,7 +154,7 @@ CREATE TABLE user (
             entityDescriptor.columns?.ForEach(column => sqlFields.Add(GetColumnSql(column)));
 
             return $@"
-CREATE TABLE {DelimitIdentifier(entityDescriptor.tableName)} (
+CREATE TABLE {DelimitTableName(entityDescriptor)} (
 {string.Join(",\r\n  ", sqlFields)}
 )";
 
@@ -225,7 +225,7 @@ CREATE TABLE {DelimitIdentifier(entityDescriptor.tableName)} (
             #endregion
 
             // #3 build sql
-            string sql = $@"insert into {DelimitIdentifier(entityDescriptor.tableName)}({string.Join(",", columnNames)}) values({string.Join(",", valueParams)});";
+            string sql = $@"insert into {DelimitTableName(entityDescriptor)}({string.Join(",", columnNames)}) values({string.Join(",", valueParams)});";
             //sql+=$"select seq from sqlite_sequence where name = '{tableName}'; ";
             sql += "select null;";
             return (sql, GetSqlParams);

+ 1 - 2
src/Vitorm.Sqlite/TranslateService/ExecuteDeleteTranslateService.cs

@@ -23,14 +23,13 @@ delete from User where id in ( SELECT id FROM tmp );
 
             var NewLine = "\r\n";
             var keyName = entityDescriptor.keyName;
-            var tableName = entityDescriptor.tableName;
 
 
             var sql = $"WITH tmp AS ( {NewLine}";
             sql += sqlInner;
 
             sql += $"{NewLine}){NewLine}";
-            sql += $"delete from {sqlTranslator.DelimitIdentifier(tableName)} ";
+            sql += $"delete from {sqlTranslator.DelimitTableName(entityDescriptor)} ";
 
             sql += $"{NewLine}where {sqlTranslator.DelimitIdentifier(keyName)} in ( SELECT {sqlTranslator.DelimitIdentifier(keyName)} FROM tmp ); {NewLine}";
 

+ 2 - 3
src/Vitorm.Sqlite/TranslateService/ExecuteUpdateTranslateService.cs

@@ -36,19 +36,18 @@ UPDATE User SET name = 'u'||id  where id > 0;
 
             var NewLine = "\r\n";
             var keyName = entityDescriptor.keyName;
-            var tableName = entityDescriptor.tableName;
 
 
             var sql = $"WITH tmp AS ( {NewLine}";
             sql += sqlInner;
 
             sql += $"{NewLine}){NewLine}";
-            sql += $"UPDATE {sqlTranslator.DelimitIdentifier(tableName)}{NewLine}";
+            sql += $"UPDATE {sqlTranslator.DelimitTableName(entityDescriptor)}{NewLine}";
             sql += $"Set ";
 
             var sqlToUpdateCols = columnsToUpdate
                 .Select(m => m.name)
-                .Select(name => $"{NewLine}  {sqlTranslator.DelimitIdentifier(name)} = (SELECT {sqlTranslator.DelimitIdentifier("_" + name)} FROM tmp WHERE tmp.{sqlTranslator.DelimitIdentifier(keyName)} ={sqlTranslator.GetSqlField(tableName, keyName)} )");
+                .Select(name => $"{NewLine}  {sqlTranslator.DelimitIdentifier(name)} = (SELECT {sqlTranslator.DelimitIdentifier("_" + name)} FROM tmp WHERE tmp.{sqlTranslator.DelimitIdentifier(keyName)} = {sqlTranslator.DelimitTableName(entityDescriptor)}.{sqlTranslator.DelimitIdentifier(keyName)} )");
 
             sql += string.Join(",", sqlToUpdateCols);
 

+ 1 - 1
src/Vitorm/Entity/IEntityDescriptor.cs

@@ -5,7 +5,7 @@ namespace Vitorm.Entity
     public interface IEntityDescriptor
     {
         Type entityType { get; }
-
+        string schema { get; }
         string tableName { get; }
         string keyName { get; }
         /// <summary>

+ 2 - 2
src/Vitorm/Sql/DataReader/EntityReader/ModelReader.EntityPropertyReader.cs

@@ -8,9 +8,9 @@ namespace Vitorm.Sql.DataReader
     {
         class EntityPropertyReader : SqlFieldReader
         {
-            IColumnDescriptor column;
+            public IColumnDescriptor column { get; protected set; }
 
-            public EntityPropertyReader(EntityReader entityReader, IColumnDescriptor column, bool isPrimaryKey, string sqlFieldName)
+            public EntityPropertyReader(EntityReader entityReader, IColumnDescriptor column, string sqlFieldName)
                 : base(entityReader.sqlFields, column.type, sqlFieldName)
             {
                 this.column = column;

+ 20 - 8
src/Vitorm/Sql/DataReader/EntityReader/ModelReader.cs

@@ -14,6 +14,7 @@ namespace Vitorm.Sql.DataReader
         public string argUniqueKey { get; set; }
         public Type argType { get; set; }
 
+        //EntityPropertyReader keyPropertyReader;
         List<EntityPropertyReader> proppertyReaders = new();
 
         public ModelReader(EntityReader entityReader, ISqlTranslateService sqlTranslator, string tableName, string argUniqueKey, string argName, Type argType, IEntityDescriptor entityDescriptor)
@@ -22,20 +23,31 @@ namespace Vitorm.Sql.DataReader
             this.argName = argName;
             this.argType = argType;
 
-            // ##1 key
-            string sqlFieldName = sqlTranslator.GetSqlField(tableName, entityDescriptor.keyName);
-            proppertyReaders.Add(new EntityPropertyReader(entityReader, entityDescriptor.key, true, sqlFieldName));
-
-            // ##2 properties
-            foreach (var column in entityDescriptor.columns)
+            // #1 key
+            {
+                //var column = entityDescriptor.key;
+                //var sqlFieldName = sqlTranslator.GetSqlField(tableName, column.name);
+                //keyPropertyReader = new EntityPropertyReader(entityReader, column, sqlFieldName);
+            }
+            // #2 properties
             {
-                sqlFieldName = sqlTranslator.GetSqlField(tableName, column.name);
-                proppertyReaders.Add(new EntityPropertyReader(entityReader, column, false, sqlFieldName));
+                foreach (var column in entityDescriptor.allColumns)
+                {
+                    var sqlFieldName = sqlTranslator.GetSqlField(tableName, column.name);
+                    proppertyReaders.Add(new EntityPropertyReader(entityReader, column, sqlFieldName));
+                }
             }
         }
         public object Read(IDataReader reader)
         {
+            // #1 key           
+            //var value = keyPropertyReader.Read(reader);
+            //if (value == null) return null;
+
             var entity = Activator.CreateInstance(argType);
+            //keyPropertyReader.column.SetValue(entity, value);
+
+            //#2 properties
             foreach (var perpertyReader in proppertyReaders)
             {
                 if (!perpertyReader.Read(reader, entity))

+ 11 - 6
src/Vitorm/Sql/SqlDbContext.cs

@@ -9,7 +9,6 @@ using Vitorm.Sql.Transaction;
 using Vitorm.Sql.SqlTranslate;
 using Vitorm.StreamQuery;
 using Vit.Extensions.Vitorm_Extensions;
-using Vitorm.Extensions;
 
 namespace Vitorm.Sql
 {
@@ -32,10 +31,11 @@ namespace Vitorm.Sql
 
         public virtual ISqlTranslateService sqlTranslateService { get; private set; }
 
-        public virtual void Init(ISqlTranslateService sqlTranslateService, Func<IDbConnection> createDbConnection)
+        public virtual void Init(ISqlTranslateService sqlTranslateService, Func<IDbConnection> createDbConnection, SqlExecutor sqlExecutor=null)
         {
             this.sqlTranslateService = sqlTranslateService;
             this.createDbConnection = createDbConnection;
+            this.sqlExecutor = sqlExecutor ?? SqlExecutor.Instance;
         }
 
 
@@ -389,28 +389,33 @@ namespace Vitorm.Sql
 
 
         #region Execute
-
+        protected SqlExecutor sqlExecutor;
         public int? commandTimeout;
+        public virtual int ExecuteWithTransaction(string sql, IDictionary<string, object> param = null, IDbTransaction transaction = null)
+        {
+            commandTimeout ??= this.commandTimeout;
+            return sqlExecutor.Execute(dbConnection, sql, param: param, transaction: transaction, commandTimeout: commandTimeout);
+        }
 
         public virtual int Execute(string sql, IDictionary<string, object> param = null, int? commandTimeout = null)
         {
             var transaction = GetCurrentTransaction();
             commandTimeout ??= this.commandTimeout;
-            return dbConnection.Execute(sql, param: param, transaction: transaction, commandTimeout: commandTimeout);
+            return sqlExecutor.Execute(dbConnection,sql, param: param, transaction: transaction, commandTimeout: commandTimeout);
         }
 
         public virtual IDataReader ExecuteReader(string sql, IDictionary<string, object> param = null, int? commandTimeout = null)
         {
             var transaction = GetCurrentTransaction();
             commandTimeout ??= this.commandTimeout;
-            return dbConnection.ExecuteReader(sql, param: param, transaction: transaction, commandTimeout: commandTimeout);
+            return sqlExecutor.ExecuteReader(dbConnection, sql, param: param, transaction: transaction, commandTimeout: commandTimeout);
         }
 
         public virtual object ExecuteScalar(string sql, IDictionary<string, object> param = null, int? commandTimeout = null)
         {
             var transaction = GetCurrentTransaction();
             commandTimeout ??= this.commandTimeout;
-            return dbConnection.ExecuteScalar(sql, param: param, transaction: transaction, commandTimeout: commandTimeout);
+            return sqlExecutor.ExecuteScalar(dbConnection, sql, param: param, transaction: transaction, commandTimeout: commandTimeout);
         }
         #endregion
 

+ 7 - 16
src/Vitorm/Extensions/IDbConnection_Execute_Extensions.cs → src/Vitorm/Sql/SqlExecutor.cs

@@ -1,16 +1,14 @@
 using System;
 using System.Collections.Generic;
 using System.Data;
-using System.Runtime.CompilerServices;
 
-
-namespace Vitorm.Extensions
+namespace Vitorm.Sql
 {
-    public static partial class IDbConnection_Execute_Extensions
+    public class SqlExecutor
     {
+        public readonly static SqlExecutor Instance = new SqlExecutor();
 
-        [MethodImpl(MethodImplOptions.AggressiveInlining)]
-        public static int Execute(this IDbConnection conn, string sql, IDictionary<string, object> param = null, IDbTransaction transaction = null, int? commandTimeout = null)
+        public virtual int Execute(IDbConnection conn, string sql, IDictionary<string, object> param = null, IDbTransaction transaction = null, int? commandTimeout = null)
         {
             // #1 setup command
             using var cmd = conn.CreateCommand();
@@ -36,9 +34,7 @@ namespace Vitorm.Extensions
         }
 
 
-
-        [MethodImpl(MethodImplOptions.AggressiveInlining)]
-        public static object ExecuteScalar(this IDbConnection conn, string sql, IDictionary<string, object> param = null, IDbTransaction transaction = null, int? commandTimeout = null)
+        public virtual object ExecuteScalar(IDbConnection conn, string sql, IDictionary<string, object> param = null, IDbTransaction transaction = null, int? commandTimeout = null)
         {
             // #1 setup command
             using var cmd = conn.CreateCommand();
@@ -61,10 +57,7 @@ namespace Vitorm.Extensions
             }
         }
 
-
-
-        [MethodImpl(MethodImplOptions.AggressiveInlining)]
-        public static IDataReader ExecuteReader(this IDbConnection conn, string sql, IDictionary<string, object> param = null, IDbTransaction transaction = null, int? commandTimeout = null)
+        public virtual IDataReader ExecuteReader(IDbConnection conn, string sql, IDictionary<string, object> param = null, IDbTransaction transaction = null, int? commandTimeout = null)
         {
 
             IDbCommand cmd = null;
@@ -102,8 +95,7 @@ namespace Vitorm.Extensions
         }
 
 
-        [MethodImpl(MethodImplOptions.AggressiveInlining)]
-        static void AddParameter(IDbCommand cmd, IDictionary<string, object> param)
+        public virtual void AddParameter(IDbCommand cmd, IDictionary<string, object> param)
         {
             if (param != null)
             {
@@ -116,6 +108,5 @@ namespace Vitorm.Extensions
                 }
             }
         }
-
     }
 }

+ 2 - 2
src/Vitorm/Sql/SqlTranslate/BaseQueryTranslateService.cs

@@ -148,8 +148,8 @@ namespace Vitorm.Sql.SqlTranslate
             if (stream is SourceStream sourceStream)
             {
                 IQueryable query = sourceStream.GetSource() as IQueryable;
-                var tableName = arg.dbContext.GetEntityDescriptor(query.ElementType)?.tableName;
-                return $"{sqlTranslator.DelimitIdentifier(tableName)} as " + stream.alias;
+                var entityDescriptor = arg.dbContext.GetEntityDescriptor(query.ElementType) ;
+                return $"{sqlTranslator.DelimitTableName(entityDescriptor)} as " + stream.alias;
             }
             if (stream is CombinedStream baseStream)
             {

+ 15 - 7
src/Vitorm/Sql/SqlTranslate/SqlTranslateService.cs

@@ -45,6 +45,9 @@ namespace Vitorm.Sql.SqlTranslate
         ///     A valid name based on the candidate name.
         /// </returns>
         public virtual string GenerateParameterName(string name) => name.StartsWith("@", StringComparison.Ordinal) ? name : "@" + name;
+
+
+        public virtual string DelimitTableName(IEntityDescriptor entityDescriptor) => DelimitIdentifier(entityDescriptor.tableName);
         #endregion
 
 
@@ -213,12 +216,17 @@ namespace Vitorm.Sql.SqlTranslate
                     {
                         ExpressionNode_Constant constant = data;
                         var value = constant.value;
-                        if (value is not string && value is IEnumerable enumerable)
+                        if (value == null)
+                        {
+                            return "null";
+                        }
+                        else if (value is not string && value is IEnumerable enumerable)
                         {
                             StringBuilder sql = null;
 
                             foreach (var item in enumerable)
                             {
+                                if (item == null) continue;
                                 if (sql == null)
                                 {
                                     sql = new StringBuilder("(");
@@ -239,7 +247,7 @@ namespace Vitorm.Sql.SqlTranslate
                         else
                         {
                             var paramName = arg.NewParamName();
-                            arg.sqlParam[paramName] = constant.value;
+                            arg.sqlParam[paramName] = value;
                             return GenerateParameterName(paramName);
                         }
 
@@ -306,7 +314,7 @@ namespace Vitorm.Sql.SqlTranslate
             #endregion
 
             // #3 build sql
-            string sql = $@"insert into {DelimitIdentifier(entityDescriptor.tableName)}({string.Join(",", columnNames)}) values({string.Join(",", valueParams)});";
+            string sql = $@"insert into {DelimitTableName(entityDescriptor)}({string.Join(",", columnNames)}) values({string.Join(",", valueParams)});";
             //sql+=$"select seq from sqlite_sequence where name = '{tableName}'; ";
 
             return (sql, GetSqlParams);
@@ -320,7 +328,7 @@ namespace Vitorm.Sql.SqlTranslate
             var entityDescriptor = arg.entityDescriptor;
 
             // #2 build sql
-            string sql = $@"select * from {DelimitIdentifier(entityDescriptor.tableName)} where {DelimitIdentifier(entityDescriptor.keyName)}={GenerateParameterName(entityDescriptor.keyName)};";
+            string sql = $@"select * from {DelimitTableName(entityDescriptor)} where {DelimitIdentifier(entityDescriptor.keyName)}={GenerateParameterName(entityDescriptor.keyName)};";
 
             return sql;
         }
@@ -365,7 +373,7 @@ namespace Vitorm.Sql.SqlTranslate
             }
 
             // #3 build sql
-            string sql = $@"update {DelimitIdentifier(entityDescriptor.tableName)} set {string.Join(",", columnsToUpdate)} where {DelimitIdentifier(entityDescriptor.keyName)}={GenerateParameterName(entityDescriptor.keyName)};";
+            string sql = $@"update {DelimitTableName(entityDescriptor)} set {string.Join(",", columnsToUpdate)} where {DelimitIdentifier(entityDescriptor.keyName)}={GenerateParameterName(entityDescriptor.keyName)};";
 
             return (sql, GetSqlParams);
         }
@@ -385,7 +393,7 @@ namespace Vitorm.Sql.SqlTranslate
             var entityDescriptor = arg.entityDescriptor;
 
             // #2 build sql
-            string sql = $@"delete from {DelimitIdentifier(entityDescriptor.tableName)} where {DelimitIdentifier(entityDescriptor.keyName)}={GenerateParameterName(entityDescriptor.keyName)};";
+            string sql = $@"delete from {DelimitTableName(entityDescriptor)} where {DelimitIdentifier(entityDescriptor.keyName)}={GenerateParameterName(entityDescriptor.keyName)} ; ";
 
             return sql;
         }
@@ -399,7 +407,7 @@ namespace Vitorm.Sql.SqlTranslate
             StringBuilder sql = new StringBuilder();
             Dictionary<string, object> sqlParam = new();
 
-            sql.Append("delete from ").Append(DelimitIdentifier(entityDescriptor.tableName)).Append(" where ").Append(DelimitIdentifier(entityDescriptor.keyName)).Append(" in (");
+            sql.Append("delete from ").Append(DelimitTableName(entityDescriptor)).Append(" where ").Append(DelimitIdentifier(entityDescriptor.keyName)).Append(" in (");
 
             int keyIndex = 0;
             foreach (var key in keys)