コード例 #1
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);
        }
コード例 #2
0
                protected override MetadataProviderBase CreateMetadataProvider()
                {
                    MetadataProviderBase provider = base.CreateMetadataProvider();

                    provider.AddProvider(new TestMapMetadataProvider());
                    return(provider);
                }
コード例 #3
0
ファイル: SqlQueryBase.cs プロジェクト: epdumitru/mysqlib
        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);
        }
コード例 #4
0
ファイル: ComplexMappingTest.cs プロジェクト: x64/bltoolkit
        public void RelationAttributeTest3()
        {
            MappingSchema        ms = Map.DefaultSchema;
            MetadataProviderBase mp = ms.MetadataProvider;
            bool isSet;

            List <MapRelationBase> relations = mp.GetRelations(ms, ms.Extensions, typeof(Detail), null, out isSet);

            Assert.That(relations.Count == 2);
        }
コード例 #5
0
ファイル: ComplexMappingTest.cs プロジェクト: x64/bltoolkit
        public void RelationAttributeTest2()
        {
            MappingSchema        ms = Map.DefaultSchema;
            MetadataProviderBase mp = ms.MetadataProvider;
            bool isSet;

            List <MapRelationBase> relations = mp.GetRelations(ms, ms.Extensions, typeof(Master), typeof(Detail), out isSet);

            //sets[0] = new MapResultSet(typeof(Master),    masters);
            //sets[1] = new MapResultSet(typeof(Detail),    details);
            //sets[2] = new MapResultSet(typeof(SubDetail), subdetails);

            //sets[0].AddRelation(sets[1], "MasterId", "MasterId", "Details");
            //sets[1].AddRelation(sets[0], "MasterId", "MasterId", "Master");
            //sets[1].AddRelation(sets[2], "DetailId",       "Id", "SubDetails");
            //sets[2].AddRelation(sets[1], "Id",       "DetailId", "Master");


            Assert.That(isSet);
            Assert.That(relations.Count == 1);
            Assert.AreEqual("MasterId", relations[0].MasterIndex.Fields[0].Name);
            Assert.AreEqual("MasterId", relations[0].SlaveIndex.Fields[0].Name);
            Assert.AreEqual("Details", relations[0].ContainerName);

            relations = mp.GetRelations(ms, ms.Extensions, typeof(Detail), typeof(Master), out isSet);

            Assert.That(isSet);
            Assert.That(relations.Count == 1);
            Assert.AreEqual("MasterId", relations[0].MasterIndex.Fields[0].Name);
            Assert.AreEqual("MasterId", relations[0].SlaveIndex.Fields[0].Name);
            Assert.AreEqual("Master", relations[0].ContainerName);

            relations = mp.GetRelations(ms, ms.Extensions, typeof(Detail), typeof(SubDetail), out isSet);

            Assert.That(isSet);
            Assert.That(relations.Count == 1);
            Assert.AreEqual("Id", relations[0].MasterIndex.Fields[0].Name);
            Assert.AreEqual("DetailId", relations[0].SlaveIndex.Fields[0].Name);
            Assert.AreEqual("SubDetails", relations[0].ContainerName);

            relations = mp.GetRelations(ms, ms.Extensions, typeof(SubDetail), typeof(Detail), out isSet);

            Assert.That(isSet);
            Assert.That(relations.Count == 1);
            Assert.AreEqual("DetailId", relations[0].MasterIndex.Fields[0].Name);
            Assert.AreEqual("Id", relations[0].SlaveIndex.Fields[0].Name);
            Assert.AreEqual("Master", relations[0].ContainerName);
        }
コード例 #6
0
ファイル: SqlQueryBase.cs プロジェクト: epdumitru/mysqlib
        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);
        }
コード例 #7
0
ファイル: ObjectMapper.cs プロジェクト: epdumitru/mysqlib
 protected virtual MetadataProviderBase CreateMetadataProvider()
 {
     return(MetadataProviderBase.CreateProvider());
 }
コード例 #8
0
ファイル: MetadataProviderTest.cs プロジェクト: x64/bltoolkit
 static void MapMetadataProvider_OnCreateProvider(MetadataProviderBase parentProvider)
 {
     parentProvider.AddProvider(new CustomMetadataProvider());
 }
コード例 #9
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);
        }