예제 #1
0
        public IDbDataParameter[] GetParameters(DbManager db, object obj)
        {
            IDbDataParameter[] parameters = new IDbDataParameter[_parameters.Count];

            for (int i = 0; i < _parameters.Count; i++)
            {
                SqlQueryParameterInfo info = _parameters[i];

                //parameters[i] = db.Parameter(info.ParameterName, info.MemberMapper.GetValue(obj));

                MapMemberInfo mmi = info.MemberMapper.MapMemberInfo;
                object        val = info.MemberMapper.GetValue(obj);

                if (val == null && mmi.Nullable && mmi.NullValue == null)
                {
                    //replace value with DbNull
                    val = DBNull.Value;
                }

                if (mmi.IsDbTypeSet)
                {
                    parameters[i] = mmi.IsDbSizeSet
                                                ? db.Parameter(info.ParameterName, val, info.MemberMapper.DbType, mmi.DbSize)
                                                : db.Parameter(info.ParameterName, val, info.MemberMapper.DbType);
                }
                else
                {
                    parameters[i] = db.Parameter(info.ParameterName, val);
                }
            }

            return(parameters);
        }
예제 #2
0
        protected SqlQueryInfo CreateInsertSqlText(DbManager db, Type type, int nParameter)
        {
            TypeExtension        typeExt = TypeExtension.GetTypeExtension(type, Extensions);
            ObjectMapper         om      = db.MappingSchema.GetObjectMapper(type);
            List <MemberMapper>  list    = new List <MemberMapper>();
            StringBuilder        sb      = new StringBuilder();
            SqlQueryInfo         query   = new SqlQueryInfo(om);
            MetadataProviderBase mp      = MappingSchema.MetadataProvider;

            sb.Append("INSERT INTO ");
            AppendTableName(sb, db, type);
            sb.Append(" (\n");

            foreach (MemberMapper mm in GetFieldList(om))
            {
                // IT: This works incorrectly for complex mappers.
                //
                // [2009-03-24] ili: use mm.MemberAccessor instead of mm.ComplexMemberAccessor
                // as in CreateUpdateSqlText
                //

                bool isSet;

                if (mp.GetNonUpdatableAttribute(type, typeExt, mm.MapMemberInfo.MemberAccessor, out isSet) == null || !isSet)
                {
                    sb.AppendFormat("\t{0},\n",
                                    db.DataProvider.Convert(mm.Name, ConvertType.NameToQueryField));
                    list.Add(mm);
                }
            }

            sb.Remove(sb.Length - 2, 1);

            sb.Append(") VALUES (\n");

            foreach (MemberMapper mm in list)
            {
                SqlQueryParameterInfo p = query.AddParameter(
                    db.DataProvider.Convert(mm.Name + "_P", ConvertType.NameToQueryParameter).ToString(),
                    mm.Name);

                if (nParameter < 0)
                {
                    sb.AppendFormat("\t{0},\n", p.ParameterName);
                }
                //sb.AppendFormat("\t{0},\n", db.DataProvider.Convert(p.ParameterName, ConvertType.NameToQueryParameter));
                else
                {
                    sb.AppendFormat("\t{{{0}}},\n", nParameter++);
                }
            }

            sb.Remove(sb.Length - 2, 1);

            sb.Append(")");

            query.QueryText = sb.ToString();

            return(query);
        }
예제 #3
0
        private void AddWherePK(DbManager db, SqlQueryInfo query, StringBuilder sb, int nParameter, FullObjectMapper mapper)
        {
            sb.Append("WHERE\n");

            foreach (IMapper mm in mapper.PropertiesMapping)
            {
                if (mm is ValueMapper && mm.DataReaderIndex == mapper.DataReaderIndex)
                {
                    var valueMapper = (ValueMapper)mm;

                    string tableAlias = mapper.PropertyType.Name;

                    //mm.Name = ID_TRACK
                    SqlQueryParameterInfo p = query.AddParameter(
                        db.DataProvider.Convert(valueMapper.ColumnName + "_W", ConvertType.NameToQueryParameter).
                        ToString(),
                        valueMapper.ColumnName);

                    sb.AppendFormat("\t{0}.{1} = ", "T" /* tableAlias */,
                                    db.DataProvider.Convert(p.FieldName, ConvertType.NameToQueryField));

                    if (nParameter < 0)
                    {
                        sb.AppendFormat("{0} AND\n", p.ParameterName);
                    }
                    else
                    {
                        sb.AppendFormat("{{{0}}} AND\n", nParameter++);
                    }
                }
            }

            sb.Remove(sb.Length - 5, 5);
        }
예제 #4
0
        protected virtual void AddWherePK(DbManager db, SqlQueryInfo query, StringBuilder sb, int nParameter)
        {
            sb.Append("WHERE\n");

            MemberMapper[] memberMappers = GetKeyFieldList(db, query.ObjectType);

            if (memberMappers.Length == 0)
            {
                throw new DataAccessException(
                          string.Format("No primary key field(s) in the type '{0}'.", query.ObjectType.FullName));
            }

            foreach (MemberMapper mm in memberMappers)
            {
                SqlQueryParameterInfo p = query.AddParameter(
                    db.DataProvider.Convert(mm.Name + "_W", ConvertType.NameToQueryParameter).ToString(),
                    mm.Name);

                sb.AppendFormat("\t{0} = ", db.DataProvider.Convert(p.FieldName, ConvertType.NameToQueryField));

                if (nParameter < 0)
                {
                    sb.AppendFormat("{0} AND\n", p.ParameterName);
                }
                else
                {
                    sb.AppendFormat("{{{0}}} AND\n", nParameter);
                }
            }

            sb.Remove(sb.Length - 5, 5);
        }
예제 #5
0
        protected SqlQueryInfo CreateUpdateSqlText(DbManager db, Type type)
        {
            TypeExtension        typeExt = TypeExtension.GetTypeExtension(type, Extensions);
            ObjectMapper         om      = db.MappingSchema.GetObjectMapper(type);
            StringBuilder        sb      = new StringBuilder();
            SqlQueryInfo         query   = new SqlQueryInfo(om);
            MetadataProviderBase mp      = MappingSchema.MetadataProvider;

            sb.AppendFormat("UPDATE\n\t{0}\nSET\n",
                            db.DataProvider.Convert(GetTableName(type), ConvertType.NameToQueryTable));

            foreach (MemberMapper mm in GetFieldList(om))
            {
                bool isSet;

                if (!mp.GetNonUpdatableFlag(type, typeExt, mm.MemberAccessor, out isSet) || !isSet)
                {
                    SqlQueryParameterInfo p = query.AddParameter(
                        db.DataProvider.Convert(mm.Name, ConvertType.NameToQueryParameter).ToString(),
                        mm.Name);

                    sb.AppendFormat("\t{0} = {1},\n",
                                    db.DataProvider.Convert(p.FieldName, ConvertType.NameToQueryField),
                                    p.ParameterName);
                }
            }

            sb.Remove(sb.Length - 2, 1);

            AddWherePK(db, query, sb);

            query.QueryText = sb.ToString();

            return(query);
        }
예제 #6
0
		public SqlQueryParameterInfo AddParameter(string parameterName, string fieldName)
		{
			var parameter = new SqlQueryParameterInfo { ParameterName = parameterName, FieldName = fieldName };

			parameter.SetMemberMapper(ObjectMapper);

			_parameters.Add(parameter);

			return parameter;
		}
예제 #7
0
        //NOTE Changed to virtual
        public virtual SqlQueryParameterInfo AddParameter(string parameterName, string fieldName)
        {
            var parameter = new SqlQueryParameterInfo {
                ParameterName = parameterName, FieldName = fieldName
            };

            parameter.SetMemberMapper(ObjectMapper);

            Parameters.Add(parameter);

            return(parameter);
        }
예제 #8
0
        public SqlQueryParameterInfo AddParameter(string parameterName, string fieldName)
        {
            SqlQueryParameterInfo parameter = new SqlQueryParameterInfo();

            parameter.ParameterName = parameterName;
            parameter.FieldName     = fieldName;

            parameter.SetMemberMapper(_objectMapper);

            _parameters.Add(parameter);

            return(parameter);
        }
예제 #9
0
        public IDbDataParameter[] GetParameters(DbManager db, object obj)
        {
            IDbDataParameter[] parameters = new IDbDataParameter[_parameters.Count];

            for (int i = 0; i < _parameters.Count; i++)
            {
                SqlQueryParameterInfo info = (SqlQueryParameterInfo)_parameters[i];

                parameters[i] = db.Parameter(info.ParameterName, info.MemberMapper.GetValue(obj));
            }

            return(parameters);
        }
예제 #10
0
        protected SqlQueryInfo CreateInsertSqlText(DbManager db, Type type)
        {
            TypeExtension        typeExt = TypeExtension.GetTypeExtension(type, Extensions);
            ObjectMapper         om      = db.MappingSchema.GetObjectMapper(type);
            List <MemberMapper>  list    = new List <MemberMapper>();
            StringBuilder        sb      = new StringBuilder();
            SqlQueryInfo         query   = new SqlQueryInfo(om);
            MetadataProviderBase mp      = MappingSchema.MetadataProvider;

            sb.AppendFormat("INSERT INTO {0} (\n",
                            db.DataProvider.Convert(GetTableName(type), ConvertType.NameToQueryTable));

            foreach (MemberMapper mm in GetFieldList(om))
            {
                // IT: This works incorrectly for complex mappers.
                //
                bool isSet;

                if (!mp.GetNonUpdatableFlag(type, typeExt, mm.ComplexMemberAccessor, out isSet) || !isSet)
                {
                    sb.AppendFormat("\t{0},\n",
                                    db.DataProvider.Convert(mm.Name, ConvertType.NameToQueryField));
                    list.Add(mm);
                }
            }

            sb.Remove(sb.Length - 2, 1);

            sb.Append(") VALUES (\n");

            foreach (MemberMapper mm in list)
            {
                SqlQueryParameterInfo p = query.AddParameter(
                    db.DataProvider.Convert(mm.Name, ConvertType.NameToQueryParameter).ToString(),
                    mm.Name);

                sb.AppendFormat("\t{0},\n", p.ParameterName);
            }

            sb.Remove(sb.Length - 2, 1);

            sb.Append(")");

            query.QueryText = sb.ToString();

            return(query);
        }
예제 #11
0
        public IDbDataParameter[] GetParameters(DbManager db, object[] key)
        {
            if (_parameters.Count != key.Length)
            {
                throw new DataAccessException("Parameter list does match key list.");
            }

            IDbDataParameter[] parameters = new IDbDataParameter[_parameters.Count];

            for (int i = 0; i < _parameters.Count; i++)
            {
                SqlQueryParameterInfo info = _parameters[i];

                parameters[i] = db.Parameter(info.ParameterName, key[i]);
            }

            return(parameters);
        }
예제 #12
0
        protected SqlQueryInfo CreateUpdateSqlText(DbManager db, Type type, int nParameter)
        {
            TypeExtension        typeExt = TypeExtension.GetTypeExtension(type, Extensions);
            ObjectMapper         om      = db.MappingSchema.GetObjectMapper(type);
            StringBuilder        sb      = new StringBuilder();
            SqlQueryInfo         query   = new SqlQueryInfo(om);
            MetadataProviderBase mp      = MappingSchema.MetadataProvider;

            sb.Append("UPDATE\n\t");
            AppendTableName(sb, db, type);
            sb.Append("\nSET\n");

            MemberMapper[] fields    = GetFieldList(om);
            bool           hasFields = false;

            foreach (MemberMapper mm in fields)
            {
                bool isSet;

                if (mp.GetNonUpdatableAttribute(type, typeExt, mm.MapMemberInfo.MemberAccessor, out isSet) != null && isSet)
                {
                    continue;
                }

                mp.GetPrimaryKeyOrder(type, typeExt, mm.MapMemberInfo.MemberAccessor, out isSet);

                if (isSet)
                {
                    continue;
                }

                hasFields = true;

                SqlQueryParameterInfo p = query.AddParameter(
                    db.DataProvider.Convert(mm.Name + "_P", ConvertType.NameToQueryParameter).ToString(),
                    mm.Name);

                sb.AppendFormat("\t{0} = ", db.DataProvider.Convert(p.FieldName, ConvertType.NameToQueryField));

                if (nParameter < 0)
                {
                    sb.AppendFormat("{0},\n", p.ParameterName);
                }
                else
                {
                    sb.AppendFormat("\t{{{0}}},\n", nParameter++);
                }
            }

            if (!hasFields)
            {
                throw new DataAccessException(
                          string.Format("There are no fields to update in the type '{0}'.", query.ObjectType.FullName));
            }

            sb.Remove(sb.Length - 2, 1);

            AddWherePK(db, query, sb, nParameter);

            query.QueryText = sb.ToString();

            return(query);
        }