Ejemplo n.º 1
0
        private static string GetIdentitySeq(DataTableEntityMapping mapping, CreateSqlState state)
        {
            if (mapping.IdentityField == null)
            {
                throw new LightDataException(SR.NoIdentityField);
            }

            string seq;
            var    postgreIdentity = mapping.ExtentParams.GetParamValue("PostgreIdentitySeq");

            if (!string.IsNullOrEmpty(postgreIdentity))
            {
                seq = postgreIdentity;
            }
            else
            {
                if (!state.TryGetAliasTableName(mapping, out var name))
                {
                    name = mapping.TableName;
                }

                seq = $"{name}_{mapping.IdentityField.Name}_seq";
            }

            return(seq);
        }
Ejemplo n.º 2
0
        public override string CreateIdentitySql(DataTableEntityMapping mapping, CreateSqlState state)
        {
            if (mapping.IdentityField != null)
            {
                return("select @@Identity;");
            }

            return(string.Empty);
        }
Ejemplo n.º 3
0
        public override string CreateIdentitySql(DataTableEntityMapping mapping, CreateSqlState state)
        {
            if (mapping.IdentityField != null)
            {
                return($"select currval('\"{GetIdentitySeq(mapping, state)}\"');");
            }

            return(string.Empty);
        }
Ejemplo n.º 4
0
 public override string CreateIdentitySql(DataTableEntityMapping mapping, CreateSqlState state)
 {
     if (mapping.IdentityField != null)
     {
         return("select last_insert_id();");
     }
     else
     {
         return(string.Empty);
     }
 }
Ejemplo n.º 5
0
 public override string CreateIdentitySql(DataTableEntityMapping mapping, CreateSqlState state)
 {
     if (mapping.IdentityField != null)
     {
         return(string.Format("select currval('\"{0}\"');", GetIndentitySeq(mapping, state)));
     }
     else
     {
         return(string.Empty);
     }
 }
Ejemplo n.º 6
0
        public override CommandData CreateTruncateTableCommand(DataTableEntityMapping mapping, CreateSqlState state)
        {
            CommandData data = base.CreateTruncateTableCommand(mapping, state);

            if (mapping.IdentityField != null)
            {
                string restartSeq = string.Format("alter sequence \"{0}\" restart;", GetIndentitySeq(mapping, state));
                data.CommandText += restartSeq;
            }
            return(data);
        }
Ejemplo n.º 7
0
        public override CommandData CreateBaseInsertCommand(DataTableEntityMapping mapping, object entity, bool refresh, bool updateIdentity, CreateSqlState state)
        {
            CommandData command = base.CreateBaseInsertCommand(mapping, entity, refresh, false, state);

            if (updateIdentity && mapping.IdentityField != null)
            {
                string idensql = string.Format("returning {0}", CreateDataFieldSql(mapping.IdentityField.Name));
                command.CommandText = command.CommandText + idensql;
                command.IdentitySql = true;
            }
            return(command);
        }
Ejemplo n.º 8
0
        public override CommandData CreateTruncateTableCommand(DataTableEntityMapping mapping, CreateSqlState state)
        {
            var data = base.CreateTruncateTableCommand(mapping, state);

            if (mapping.IdentityField != null)
            {
                var restartSeq = $"alter sequence \"{GetIdentitySeq(mapping, state)}\" restart;";
                data.CommandText += restartSeq;
            }

            return(data);
        }
Ejemplo n.º 9
0
        public override CommandData CreateBaseInsertCommand(DataTableEntityMapping mapping, object entity, bool refresh,
                                                            bool updateIdentity, CreateSqlState state)
        {
            var command = base.CreateBaseInsertCommand(mapping, entity, refresh, false, state);

            if (updateIdentity && mapping.IdentityField != null)
            {
                var idenSql = $"returning {CreateDataFieldSql(mapping.IdentityField.Name)}";
                command.CommandText += idenSql;
                command.IdentitySql  = true;
            }

            return(command);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
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);
        }
Ejemplo n.º 14
0
        public override IDbCommand[] CreateBulkInsertCommand(Array entitys, int batchCount)
        {
            if (entitys == null || entitys.Length == 0)
            {
                throw new ArgumentNullException("entitys");
            }
            if (batchCount <= 0)
            {
                batchCount = 10;
            }
            object tmpEntity = entitys.GetValue(0);
            DataTableEntityMapping mapping = DataMapping.GetTableMapping(tmpEntity.GetType());
            List <FieldMapping>    fields  = new List <FieldMapping> ();
            int totalCount = entitys.Length;

            fields.AddRange(mapping.GetFieldMappings());
            if (mapping.IdentityField != null)
            {
                fields.Remove(mapping.IdentityField);
            }
            StringBuilder values = new StringBuilder();
            StringBuilder insert = new StringBuilder();


            List <DataParameter> paramList = GetDataParameters(fields, tmpEntity);

            foreach (DataParameter dataParameter in paramList)
            {
                insert.AppendFormat("{0},", CreateDataFieldSql(dataParameter.ParameterName));
            }
            insert.Remove(insert.Length - 1, 1);
            string insertsql = string.Format("insert into {0}({1})", CreateDataTableSql(mapping.TableName), insert);

            int createCount      = 0;
            int totalCreateCount = 0;

            IDbCommand        command    = _database.CreateCommand();
            int               paramCount = 0;
            List <IDbCommand> commands   = new List <IDbCommand> ();

            foreach (object entity in entitys)
            {
                paramList = GetDataParameters(fields, entity);
                StringBuilder value = new StringBuilder();
                foreach (DataParameter dataParameter in paramList)
                {
                    IDataParameter param = _database.CreateParameter("P" + paramCount, dataParameter.Value, dataParameter.DbType, dataParameter.Direction);
                    value.AppendFormat("{0},", param.ParameterName);
                    command.Parameters.Add(param);
                    paramCount++;
                }
                value.Remove(value.Length - 1, 1);
                values.AppendFormat("({0}),", value);
                createCount++;
                totalCreateCount++;
                if (createCount == batchCount || totalCreateCount == totalCount)
                {
                    values.Remove(values.Length - 1, 1);
                    command.CommandText = string.Format("{0}values{1}", insertsql, values);
                    commands.Add(command);
                    if (totalCreateCount == totalCount)
                    {
                        break;
                    }
                    command     = _database.CreateCommand();
                    createCount = 0;
                    paramCount  = 0;
                    values      = new StringBuilder();
                }
            }
            return(commands.ToArray());
        }
Ejemplo n.º 15
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);
        }