コード例 #1
0
        internal DateDataFieldInfo(DataFieldInfo info, string format)
            : base(info)
        {
            DataFieldMapping fieldMapping = info.DataField;

            _format = format;
        }
コード例 #2
0
ファイル: BasicFieldInfo.cs プロジェクト: smuki/Light.Data2
 internal BasicFieldInfo(DataEntityMapping tableMapping, DataFieldMapping dataField)
 {
     if (tableMapping == null)
     {
         throw new System.ArgumentNullException(nameof(tableMapping));
     }
     if (tableMapping != DataEntityMapping.Default && dataField == null)
     {
         throw new System.ArgumentNullException(nameof(dataField));
     }
     _tableMapping = tableMapping;
     _dataField    = dataField;
 }
コード例 #3
0
        public override CommandData CreateBatchInsertCommand(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));
            }
            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.Append(';');
                }
            }
            CommandData command = new CommandData(totalSql.ToString());

            return(command);
        }
コード例 #4
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.Append("drop temporary table if exists `temptb`;create temporary table `temptb`(`id` int(11));");

            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({1});insert into `temptb`(`id`) select last_insert_id();", insertSql, values);
            }
            totalSql.Append("select `id` from `temptb`;");
            CommandData command = new CommandData(totalSql.ToString());

            return(command);
        }
コード例 #5
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);
        }