internal override string CreateSqlString(CommandFactory factory, bool isFullName, CreateSqlState state)
        {
            var sql = state.GetDataSql(this, isFullName);

            if (sql != null)
            {
                return(sql);
            }

            var query = _query.CreateSqlString(factory, isFullName, state);

            object ifTrue;
            object ifFalse;
            var    ifTrueInfo  = _ifTrue as DataFieldInfo;
            var    ifFalseInfo = _ifFalse as DataFieldInfo;

            if (!Equals(ifTrueInfo, null) && !Equals(ifFalseInfo, null))
            {
                ifTrue  = ifTrueInfo.CreateSqlString(factory, isFullName, state);
                ifFalse = ifFalseInfo.CreateSqlString(factory, isFullName, state);
            }
            else if (!Equals(ifTrueInfo, null))
            {
                ifTrue = ifTrueInfo.CreateSqlString(factory, isFullName, state);
                var ifFalseObject = LambdaExpressionExtend.ConvertLambdaObject(_ifFalse).AdjustValue();
                ifFalse = state.AddDataParameter(factory, ifFalseObject);
            }
            else if (!Equals(ifFalseInfo, null))
            {
                ifFalse = ifFalseInfo.CreateSqlString(factory, isFullName, state);
                var ifTrueObject = LambdaExpressionExtend.ConvertLambdaObject(_ifTrue).AdjustValue();
                ifTrue = state.AddDataParameter(factory, ifTrueObject);
            }
            else
            {
                var ifTrueObject  = LambdaExpressionExtend.ConvertLambdaObject(_ifTrue).AdjustValue();
                var ifFalseObject = LambdaExpressionExtend.ConvertLambdaObject(_ifFalse).AdjustValue();
                ifTrue  = state.AddDataParameter(factory, ifTrueObject);
                ifFalse = state.AddDataParameter(factory, ifFalseObject);
            }

            sql = factory.CreateConditionSql(query, ifTrue, ifFalse);
            state.SetDataSql(this, isFullName, sql);
            return(sql);
        }
        internal override string CreateSqlString(CommandFactory factory, bool isFullName, CreateSqlState state)
        {
            var sql = state.GetDataSql(this, isFullName);

            if (sql != null)
            {
                return(sql);
            }

            object left;
            object right;
            var    leftInfo  = _left as DataFieldInfo;
            var    rightInfo = _right as DataFieldInfo;

            if (!Equals(leftInfo, null) && !Equals(rightInfo, null))
            {
                left  = leftInfo.CreateSqlString(factory, isFullName, state);
                right = rightInfo.CreateSqlString(factory, isFullName, state);
            }
            else if (!Equals(leftInfo, null))
            {
                left = leftInfo.CreateSqlString(factory, isFullName, state);
                var rightObject = LambdaExpressionExtend.ConvertLambdaObject(_right);
                right = state.AddDataParameter(factory, rightObject);
            }
            else if (!Equals(rightInfo, null))
            {
                right = rightInfo.CreateSqlString(factory, isFullName, state);
                var leftObject = LambdaExpressionExtend.ConvertLambdaObject(_left);
                left = state.AddDataParameter(factory, leftObject);
            }
            else
            {
                throw new LightDataException(SR.DataFieldContentError);
            }
            sql = factory.CreateLikeMatchQuerySql(left, right, _starts, _ends, _isNot);
            state.SetDataSql(this, isFullName, sql);
            return(sql);
        }
Esempio n. 3
0
        internal override string CreateSqlString(CommandFactory factory, bool isFullName, CreateSqlState state)
        {
            string sql = state.GetDataSql(this, false);

            if (sql != null)
            {
                return(sql);
            }
            object value = LambdaExpressionExtend.ConvertLambdaObject(_value);

            sql = state.AddDataParameter(factory, value);

            state.SetDataSql(this, false, sql);
            return(sql);
        }
Esempio n. 4
0
        internal override string CreateSqlString(CommandFactory factory, bool isFullName, CreateSqlState state)
        {
            var sql = state.GetDataSql(this, isFullName);

            if (sql != null)
            {
                return(sql);
            }

            object left;
            object right;
            var    leftInfo  = _left as DataFieldInfo;
            var    rightInfo = _right as DataFieldInfo;

            if (!Equals(leftInfo, null) && !Equals(rightInfo, null))
            {
                left  = leftInfo.CreateSqlString(factory, isFullName, state);
                right = rightInfo.CreateSqlString(factory, isFullName, state);
            }
            else if (!Equals(leftInfo, null))
            {
                left = leftInfo.CreateSqlString(factory, isFullName, state);
                var rightObject = LambdaExpressionExtend.ConvertLambdaObject(_right);
                right = state.AddDataParameter(factory, rightObject);
            }
            else if (!Equals(rightInfo, null))
            {
                right = rightInfo.CreateSqlString(factory, isFullName, state);
                var leftObject = LambdaExpressionExtend.ConvertLambdaObject(_left);
                left = state.AddDataParameter(factory, leftObject);
            }
            else
            {
                throw new LightDataException(SR.DataFieldContentError);
            }

            switch (_opera)
            {
            case MathOperator.Puls:
                sql = factory.CreatePlusSql(left, right);
                break;

            case MathOperator.Minus:
                sql = factory.CreateMinusSql(left, right);
                break;

            case MathOperator.Multiply:
                sql = factory.CreateMultiplySql(left, right);
                break;

            case MathOperator.Divided:
                sql = factory.CreateDividedSql(left, right);
                break;

            case MathOperator.Mod:
                sql = factory.CreateModSql(left, right);
                break;

            case MathOperator.Power:
                sql = factory.CreatePowerSql(left, right);
                break;
            }
            state.SetDataSql(this, isFullName, sql);
            return(sql);
        }
        public override CommandData CreateBatchInsertCommand(DataTableEntityMapping mapping, IList entitys,
                                                             bool refresh, CreateSqlState state)
        {
            if (entitys == null || entitys.Count == 0)
            {
                throw new ArgumentNullException(nameof(entitys));
            }

            IList <DataFieldMapping> fields = mapping.CreateFieldList;
            var insertLen = fields.Count;

            if (insertLen == 0)
            {
                throw new LightDataException(string.Format(SR.NotContainNonIdentityKeyFields, mapping.ObjectType));
            }

            string insertSql = null;
            string cacheKey  = null;

            if (state.Seed == 0)
            {
                cacheKey = CommandCache.CreateKey(mapping, state);
                if (_batchInsertCache.TryGetCommand(cacheKey, out var cache))
                {
                    insertSql = cache;
                }
            }

            if (insertSql == null)
            {
                var insertList = new string[insertLen];
                for (var i = 0; i < insertLen; i++)
                {
                    var field = fields[i];
                    insertList[i] = CreateDataFieldSql(field.Name);
                }

                var insert = string.Join(",", insertList);
                insertSql = $"insert into {CreateDataTableMappingSql(mapping, state)}({insert})";
                if (cacheKey != null)
                {
                    _batchInsertCache.SetCommand(cacheKey, insertSql);
                }
            }

            var totalSql = new StringBuilder();

            totalSql.AppendFormat("{0}values", insertSql);
            var cur = 0;
            var end = entitys.Count;

            foreach (var entity in entitys)
            {
                var valuesList = new string[insertLen];
                for (var i = 0; i < insertLen; i++)
                {
                    var field = fields[i];
                    var value = field.ToInsert(entity, refresh);
                    valuesList[i] = state.AddDataParameter(this, value, field.DBType, field.ObjectType);
                }

                var values = string.Join(",", valuesList);
                totalSql.Append($"({values})");
                cur++;
                totalSql.Append(cur < end ? ',' : ';');
            }

            var command = new CommandData(totalSql.ToString());

            return(command);
        }
        public override CommandData CreateBatchInsertWithIdentityCommand(DataTableEntityMapping mapping, IList entitys,
                                                                         bool refresh, CreateSqlState state)
        {
            if (entitys == null || entitys.Count == 0)
            {
                throw new ArgumentNullException(nameof(entitys));
            }

            IList <DataFieldMapping> fields = mapping.CreateFieldList;
            var insertLen = fields.Count;

            if (insertLen == 0)
            {
                throw new LightDataException(string.Format(SR.NotContainNonIdentityKeyFields, mapping.ObjectType));
            }

            if (!mapping.HasIdentity)
            {
                throw new LightDataException(string.Format(SR.NoIdentityField, mapping.ObjectType));
            }

            string insertSql = null;
            string cacheKey  = null;

            if (state.Seed == 0)
            {
                cacheKey = CommandCache.CreateKey(mapping, state);
                if (_batchInsertCache.TryGetCommand(cacheKey, out var cache))
                {
                    insertSql = cache;
                }
            }

            if (insertSql == null)
            {
                var insertList = new string[insertLen];
                for (var i = 0; i < insertLen; i++)
                {
                    var field = fields[i];
                    insertList[i] = CreateDataFieldSql(field.Name);
                }

                var insert = string.Join(",", insertList);
                insertSql = $"insert into {CreateDataTableMappingSql(mapping, state)}({insert})";
                if (cacheKey != null)
                {
                    _batchInsertCache.SetCommand(cacheKey, insertSql);
                }
            }

            var totalSql = new StringBuilder();

            totalSql.Append("drop temporary table if exists `temptb`;create temporary table `temptb`(`id` int(11));");

            foreach (var entity in entitys)
            {
                var valuesList = new string[insertLen];
                for (var i = 0; i < insertLen; i++)
                {
                    var field = fields[i];
                    var value = field.ToInsert(entity, refresh);
                    valuesList[i] = state.AddDataParameter(this, value, field.DBType, field.ObjectType);
                }

                var values = string.Join(",", valuesList);
                totalSql.Append($"{insertSql}values({values});insert into `temptb`(`id`) select last_insert_id();");
            }

            totalSql.Append("select `id` from `temptb`;");
            var command = new CommandData(totalSql.ToString());

            return(command);
        }
Esempio n. 7
0
        public override CommandData CreateBatchInsertWithIdentityCommand(DataTableEntityMapping mapping, IList entitys, bool refresh, CreateSqlState state)
        {
            if (entitys == null || entitys.Count == 0)
            {
                throw new ArgumentNullException(nameof(entitys));
            }
            int totalCount = entitys.Count;
            IList <DataFieldMapping> fields = mapping.CreateFieldList;
            int insertLen = fields.Count;

            if (insertLen == 0)
            {
                throw new LightDataException(string.Format(SR.NotContainNonIdentityKeyFields, mapping.ObjectType));
            }
            if (!mapping.HasIdentity)
            {
                throw new LightDataException(string.Format(SR.NoIdentityField, mapping.ObjectType));
            }
            string insertSql = null;
            string cachekey  = null;

            if (state.Seed == 0)
            {
                cachekey = CommandCache.CreateKey(mapping, state);
                if (_batchInsertCache.TryGetCommand(cachekey, out string cache))
                {
                    insertSql = cache;
                }
            }
            if (insertSql == null)
            {
                string[] insertList = new string[insertLen];
                for (int i = 0; i < insertLen; i++)
                {
                    DataFieldMapping field = fields[i];
                    insertList[i] = CreateDataFieldSql(field.Name);
                }
                string insert = string.Join(",", insertList);
                insertSql = string.Format("insert into {0}({1})", CreateDataTableMappingSql(mapping, state), insert);
                if (cachekey != null)
                {
                    _batchInsertCache.SetCommand(cachekey, insertSql);
                }
            }
            StringBuilder totalSql = new StringBuilder();

            totalSql.AppendFormat("{0}values", insertSql);
            int cur = 0;
            int end = entitys.Count;

            foreach (object entity in entitys)
            {
                string[] valuesList = new string[insertLen];
                for (int i = 0; i < insertLen; i++)
                {
                    DataFieldMapping field = fields[i];
                    object           value = field.GetInsertData(entity, refresh);
                    valuesList[i] = state.AddDataParameter(this, value, field.DBType, field.ObjectType);
                }
                string values = string.Join(",", valuesList);
                totalSql.AppendFormat("({0})", values);
                cur++;
                if (cur < end)
                {
                    totalSql.Append(',');
                }
                else
                {
                    totalSql.AppendFormat("returning {0} as id;", CreateDataFieldSql(mapping.IdentityField.Name));
                }
            }
            CommandData command = new CommandData(totalSql.ToString());

            return(command);
        }
        public override CommandData CreateBaseInsertCommand(DataTableEntityMapping mapping, object entity, bool refresh,
                                                            bool updateIdentity, CreateSqlState state)
        {
            string cacheKey = null;
            var    identity = updateIdentity && mapping.HasIdentity;

            if (state.Seed == 0 && !state.UseDirectNull)
            {
                cacheKey = CommandCache.CreateKey(mapping, state);
                if (identity)
                {
                    cacheKey = string.Concat(cacheKey, "|id");
                }

                if (_baseInsertCache.TryGetCommand(cacheKey, out var cache))
                {
                    var command1 = new CommandData(cache)
                    {
                        IdentitySql = identity
                    };
                    foreach (var field in mapping.CreateFieldList)
                    {
                        var value = field.ToInsert(entity, refresh);
                        state.AddDataParameter(this, value, field.DBType, field.ObjectType);
                    }

                    return(command1);
                }
            }

            IList <DataFieldMapping> fields = mapping.CreateFieldList;
            var insertLen = fields.Count;

            if (insertLen == 0)
            {
                throw new LightDataException(string.Format(SR.NotContainNonIdentityKeyFields, mapping.ObjectType));
            }

            var insertList = new string[insertLen];
            var valuesList = new string[insertLen];

            for (var i = 0; i < insertLen; i++)
            {
                var field = fields[i];
                var value = field.ToInsert(entity, refresh);
                insertList[i] = CreateDataFieldSql(field.Name);
                valuesList[i] = state.AddDataParameter(this, value, field.DBType, field.ObjectType);
            }

            var insert = string.Join(",", insertList);
            var values = string.Join(",", valuesList);
            var sql    = identity
                ? $"insert into {CreateDataTableMappingSql(mapping, state)}({insert}) output inserted.{CreateDataFieldSql(mapping.IdentityField.Name)} values({values})"
                : $"insert into {CreateDataTableMappingSql(mapping, state)}({insert})values({values})";

            var command = new CommandData(sql)
            {
                IdentitySql = identity
            };

            if (cacheKey != null)
            {
                _baseInsertCache.SetCommand(cacheKey, command.CommandText);
            }

            return(command);
        }
Esempio n. 9
0
        internal override string CreateSqlString(CommandFactory factory, bool isFullName, CreateSqlState state)
        {
            string sql = null;

            var leftInfo  = _left as DataFieldInfo;
            var rightInfo = _right as DataFieldInfo;

            if (!Equals(leftInfo, null) && !Equals(rightInfo, null))
            {
                var leftSql  = leftInfo.CreateSqlString(factory, isFullName, state);
                var rightSql = rightInfo.CreateSqlString(factory, isFullName, state);
                sql = factory.CreateSingleParamSql(leftSql, _predicate, rightSql);
            }
            else if (!Equals(leftInfo, null))
            {
                var leftSql = leftInfo.CreateSqlString(factory, isFullName, state);
                var right   = LambdaExpressionExtend.ConvertLambdaObject(_right);
                if (Equals(right, null))
                {
                    bool predicate;
                    if (_predicate == QueryPredicate.Eq)
                    {
                        predicate = true;
                    }
                    else if (_predicate == QueryPredicate.NotEq)
                    {
                        predicate = false;
                    }
                    else
                    {
                        throw new LightDataException(string.Format(SR.UnsupportPredicate, _predicate, "null"));
                    }
                    sql = factory.CreateNullQuerySql(leftSql, predicate);
                }
                else if (right is bool ret)
                {
                    bool predicate;
                    if (_predicate == QueryPredicate.Eq)
                    {
                        predicate = true;
                    }
                    else if (_predicate == QueryPredicate.NotEq)
                    {
                        predicate = false;
                    }
                    else
                    {
                        throw new LightDataException(string.Format(SR.UnsupportPredicate, _predicate, "bool"));
                    }

                    sql = factory.CreateBooleanQuerySql(leftSql, ret, predicate, false);
                }
                else
                {
                    right = right.AdjustValue();
                    var name = state.AddDataParameter(factory, leftInfo.ToParameter(right));
                    sql = factory.CreateSingleParamSql(leftSql, _predicate, name);
                }
            }
            else if (!Equals(rightInfo, null))
            {
                var rightSql = rightInfo.CreateSqlString(factory, isFullName, state);
                var left     = LambdaExpressionExtend.ConvertLambdaObject(_left);
                if (Equals(left, null))
                {
                    bool predicate;
                    if (_predicate == QueryPredicate.Eq)
                    {
                        predicate = true;
                    }
                    else if (_predicate == QueryPredicate.NotEq)
                    {
                        predicate = false;
                    }
                    else
                    {
                        throw new LightDataException(string.Format(SR.UnsupportPredicate, _predicate, "null"));
                    }
                    sql = factory.CreateNullQuerySql(rightSql, predicate);
                }
                else if (left is bool ret)
                {
                    bool predicate;
                    if (_predicate == QueryPredicate.Eq)
                    {
                        predicate = true;
                    }
                    else if (_predicate == QueryPredicate.NotEq)
                    {
                        predicate = false;
                    }
                    else
                    {
                        throw new LightDataException(string.Format(SR.UnsupportPredicate, _predicate, "bool"));
                    }

                    sql = factory.CreateBooleanQuerySql(rightSql, ret, predicate, true);
                }
                else
                {
                    left = left.AdjustValue();
                    var name = state.AddDataParameter(factory, rightInfo.ToParameter(left));
                    sql = factory.CreateSingleParamSql(name, _predicate, rightSql);
                }
            }
            else
            {
                throw new LightDataException(SR.DataFieldContentError);
            }
            return(sql);
        }
Esempio n. 10
0
        public override CommandData CreateBaseInsertCommand(DataTableEntityMapping mapping, object entity, bool refresh, bool updateIdentity, CreateSqlState state)
        {
            string cachekey = null;
            bool   identity = updateIdentity && mapping.HasIdentity;

            if (state.Seed == 0 && !state.UseDirectNull)
            {
                cachekey = CommandCache.CreateKey(mapping, state);
                if (identity)
                {
                    cachekey = string.Concat(cachekey, "|id");
                }
                if (_baseInsertCache.TryGetCommand(cachekey, out string cache))
                {
                    CommandData command1 = new CommandData(cache);
                    command1.IdentitySql = identity;
                    foreach (DataFieldMapping field in mapping.CreateFieldList)
                    {
                        object value = field.GetInsertData(entity, refresh);
                        state.AddDataParameter(this, value, field.DBType, field.ObjectType);
                    }
                    return(command1);
                }
            }

            IList <DataFieldMapping> fields = mapping.CreateFieldList;
            int insertLen = fields.Count;

            if (insertLen == 0)
            {
                throw new LightDataException(string.Format(SR.NotContainNonIdentityKeyFields, mapping.ObjectType));
            }

            string[] insertList = new string[insertLen];
            string[] valuesList = new string[insertLen];
            for (int i = 0; i < insertLen; i++)
            {
                DataFieldMapping field = fields[i];
                object           value = field.GetInsertData(entity, refresh);
                insertList[i] = CreateDataFieldSql(field.Name);
                valuesList[i] = state.AddDataParameter(this, value, field.DBType, field.ObjectType);
            }
            string insert = string.Join(",", insertList);
            string values = string.Join(",", valuesList);
            string sql;

            if (identity)
            {
                sql = string.Format("insert into {0}({1}) output inserted.{3} values({2})", CreateDataTableMappingSql(mapping, state), insert, values, CreateDataFieldSql(mapping.IdentityField.Name));
            }
            else
            {
                sql = string.Format("insert into {0}({1})values({2})", CreateDataTableMappingSql(mapping, state), insert, values);
            }

            CommandData command = new CommandData(sql);

            command.IdentitySql = identity;
            if (cachekey != null)
            {
                _baseInsertCache.SetCommand(cachekey, command.CommandText);
            }
            return(command);
        }