Esempio n. 1
0
 /// <summary>
 /// Initializes a given column to the values defined in this ColumnAttribute.
 /// </summary>
 /// <param name="column"></param>
 public void RemapColumn(OidColumn column)
 {
     // If the attribute was set over a class definition,
     // it should overwrite existing values.
     // If the attribute is assembly wide
     // existing values should only be altered, if they don't equal
     // the initial values of a column.
     if (!IsAssemblyWideDefinition || !column.AutoIncremented)
     {
         column.AutoIncremented = this.autoIncremented;
     }
     if (!IsAssemblyWideDefinition || column.AutoIncrementStart == 1)
     {
         column.AutoIncrementStart = this.autoIncrementStart;
     }
     if (!IsAssemblyWideDefinition || column.AutoIncrementStep == 1)
     {
         column.AutoIncrementStep = this.autoIncrementStep;
     }
     if (!IsAssemblyWideDefinition || String.IsNullOrEmpty(column.FieldName))
     {
         column.FieldName = this.fieldName;
     }
     if (!IsAssemblyWideDefinition || String.IsNullOrEmpty(column.RelationName))
     {
         column.RelationName = this.relationName;
     }
     base.RemapColumn(column);
 }
Esempio n. 2
0
        /// <summary>
        /// Creates a new OidColumn object and initializes it to the values defined in this OidColumnAttribute.
        /// </summary>
        /// <param name="parent"></param>
        /// <returns></returns>
        public OidColumn CreateOidColumn(ClassOid parent)
        {
            OidColumn oidColumn = new OidColumn(parent);

            SetOidColumnValues(oidColumn);
            return(oidColumn);
        }
Esempio n. 3
0
        private void OnIdGeneration(Type t, ObjectId oid)
        {
            if (!t.FullName.StartsWith("NDOObjectIdTestClasses."))
            {
                return;                  // Use the other handler
            }
            Class cl = pm.NDOMapping.FindClass(t);

            Assert.NotNull(cl);
            OidColumn oidColumn = (OidColumn)cl.Oid.OidColumns[0];

            if (t == typeof(NDOoidAndHandler) || t == typeof(ClassWithHint))
            {
                if (oidColumn.SystemType == typeof(string))
                {
                    oid.Id[0] = this.guid.ToString();
                }
                else
                {
                    oid.Id[0] = this.guid;
                }
            }
            else
            {
                oid.Id[0] = 1;
            }
        }
Esempio n. 4
0
        public void HintEnhancerTest()
        {
            Class     cl       = pm.NDOMapping.FindClass(typeof(ClassWithHint));
            IProvider provider = NDOProviderFactory.Instance[((Connection)pm.NDOMapping.Connections.First()).Type];

            Assert.NotNull(cl, "Class not found");
            Assert.AreEqual(typeof(Guid), ((OidColumn)cl.Oid.OidColumns[0]).SystemType, "Wrong type");
            Type      t  = pm.GetType();
            FieldInfo fi = t.GetField("ds", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.NotNull(fi, "Field 'ds' not found");
            DataSet ds = (DataSet)fi.GetValue(pm);

            Assert.NotNull(ds, "DataSet is null");
            DataTable dt = ds.Tables[cl.TableName];

            Assert.NotNull(dt, "DataTable is null");
            OidColumn  oidColumn = (OidColumn)cl.Oid.OidColumns[0];
            DataColumn dc        = dt.Columns[oidColumn.Name];

            Assert.NotNull(dc, "DataColumn is null");
            Assert.NotNull(provider, "Provider is null");
            if (provider.SupportsNativeGuidType)
            {
                Assert.AreEqual(typeof(Guid), dc.DataType, "Wrong column type");
            }
            else
            {
                Assert.AreEqual(typeof(string), dc.DataType, "Wrong column type");
            }
        }
Esempio n. 5
0
 /// <summary>
 /// Initializes a given column to the values defined in this ColumnAttribute.
 /// </summary>
 /// <param name="column"></param>
 public void SetOidColumnValues(OidColumn column)
 {
     column.AutoIncremented    = this.autoIncremented;
     column.AutoIncrementStart = this.autoIncrementStart;
     column.AutoIncrementStep  = this.autoIncrementStep;
     column.FieldName          = this.fieldName;
     column.RelationName       = this.relationName;
     base.SetColumnValues(column);
 }
Esempio n. 6
0
        private void GenerateDeleteCommand()
        {
            string sql = "DELETE FROM {0} WHERE ({1})";

            //{0} = Tabellenname: Mitarbeiter
            //{1} = Where-Bedingung: id = @Original_id

            string where = string.Empty;

            int oidCount = this.classMapping.Oid.OidColumns.Count;

            for (int i = 0; i < oidCount; i++)
            {
                OidColumn oidColumn = (OidColumn)this.classMapping.Oid.OidColumns[i];
                if (provider.UseNamedParams)
                {
                    where += provider.GetQuotedName(oidColumn.Name) + " = " + provider.GetNamedParameter("D_Original_" + oidColumn.Name);
                }
                else
                {
                    where += provider.GetQuotedName(oidColumn.Name) + " = ?";
                }
                provider.AddParameter(deleteCommand, provider.GetNamedParameter("D_Original_" + oidColumn.Name), provider.GetDbType(oidColumn.SystemType), oidColumn.TypeLength, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), oidColumn.Name, System.Data.DataRowVersion.Original, null);

                Relation r = oidColumn.Relation;
                if (!this.hasGuidOid && r != null && r.ForeignKeyTypeColumnName != null)
                {
                    where += " AND " +
                             provider.GetQuotedName(r.ForeignKeyTypeColumnName) + " = " + provider.GetNamedParameter("D_Original_" + r.ForeignKeyTypeColumnName);
                    provider.AddParameter(updateCommand, provider.GetNamedParameter("D_Original_" + r.ForeignKeyTypeColumnName), provider.GetDbType(typeof(int)), provider.GetDefaultLength(typeof(int)), System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), r.ForeignKeyTypeColumnName, System.Data.DataRowVersion.Original, null);
                }

                if (i < oidCount - 1)
                {
                    where += " AND ";
                }
            }

            string whereTS = string.Empty;

            if (this.timeStampColumn != null)
            {
                if (provider.UseNamedParams)
                {
                    whereTS = " AND " + provider.GetQuotedName(timeStampColumn) + " = " + provider.GetNamedParameter("D_Original_" + timeStampColumn);
                }
                else
                {
                    whereTS = " AND " + provider.GetQuotedName(timeStampColumn) + " = ?";
                }
                provider.AddParameter(deleteCommand, provider.GetNamedParameter("D_Original_" + timeStampColumn), provider.GetDbType(typeof(Guid)), guidlength, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), timeStampColumn, System.Data.DataRowVersion.Original, null);
            }

            sql = string.Format(sql, qualifiedTableName, where + whereTS);
            this.deleteCommand.CommandText = sql;
        }
Esempio n. 7
0
		public static void OnIdGenerationEvent(Type t, ObjectId oid)
		{
			if (t.FullName.StartsWith ("NDOObjectIdTestClasses."))
				return;  // Use the other handler
            OidColumn oidColumn = (OidColumn)PmFactory.NewPersistenceManager().NDOMapping.FindClass(t).Oid.OidColumns[0];
			if (oidColumn.SystemType == typeof(int))
				oid.Id[0] = NextId();
			else if (oidColumn.SystemType == typeof(Guid))
				oid.Id[0] = Guid.NewGuid();
		}
Esempio n. 8
0
        void Initialize(MappingNode mappingNode, IEnumerable <OidColumn> oidColumns, IEnumerable <ForeignKeyColumn> fkColumns, KeyValuePair <string, int>?typeCodeInfo)
        {
            IEnumerator <OidColumn> oidEnumerator = oidColumns.GetEnumerator();

            oidEnumerator.MoveNext();
            List <OqlExpression> compareExpressions = new List <OqlExpression>();

            foreach (ForeignKeyColumn fkColumn in fkColumns)
            {
                OidColumn oidColumn = oidEnumerator.Current;
                compareExpressions.Add(new OnCompareExpression(mappingNode, oidColumn, fkColumn));
                oidEnumerator.MoveNext();
            }

            if (typeCodeInfo.HasValue)
            {
                compareExpressions.Add(new OnCompareExpression(mappingNode, typeCodeInfo.Value.Key, typeCodeInfo.Value.Value));
            }

            if (compareExpressions.Count == 1)
            {
                Add(compareExpressions[0]);
            }
            else
            {
                OqlExpression andExpression = new OqlExpression(0, 0);
                int           i             = 0;
                foreach (var compareExpression in compareExpressions)
                {
                    if (i++ == 0)
                    {
                        andExpression.Add(compareExpression);
                    }
                    else
                    {
                        andExpression.Add(compareExpression, "AND");
                    }
                }

                Add(andExpression);
            }
        }
Esempio n. 9
0
 /// <summary>
 /// Determines if a given OidColumn complies to the requirements defined by this OidColumnAttribute instance.
 /// </summary>
 /// <param name="oidColumn">The OidColumn to check.</param>
 /// <returns>True, if the OidColumn complies to the requirements defined by this OidColumnAttribute instance.</returns>
 public bool MatchesOidColumn(OidColumn oidColumn)
 {
     if (this.autoIncremented != oidColumn.AutoIncremented)
     {
         return(false);
     }
     if (this.autoIncrementStart != oidColumn.AutoIncrementStart)
     {
         return(false);
     }
     if (this.autoIncrementStep != oidColumn.AutoIncrementStep)
     {
         return(false);
     }
     if (this.fieldName != oidColumn.FieldName)  // No Test for null, because column must be null too, if attribute defines null
     {
         return(false);
     }
     if (this.relationName != oidColumn.RelationName)  // No Test for null, because column must be null too, if attribute defines null
     {
         return(false);
     }
     return(base.MatchesColumn(oidColumn));
 }
Esempio n. 10
0
        public OnCompareExpression(MappingNode mappingNode, OidColumn oidColumn, ForeignKeyColumn fkColumn)
            : base(null, 0, 0)
        {
            Class fkParentClass = mappingNode as Class;

            if (fkParentClass != null)
            {
                Add(new RawIdentifierExpression(QualifiedColumnName.Get(oidColumn), 0, 0));
                Add(new RawIdentifierExpression(QualifiedColumnName.Get(fkParentClass, fkColumn), 0, 0), "=");
                return;
            }
            MappingTable mappingTable = mappingNode as MappingTable;

            if (mappingTable != null)
            {
                Add(new RawIdentifierExpression(QualifiedColumnName.Get(oidColumn), 0, 0));
                Add(new RawIdentifierExpression(QualifiedColumnName.Get(mappingTable, fkColumn), 0, 0), "=");
                return;
            }
            else
            {
                throw new ArgumentException("OnCompareExpression: Unexpected mapping node type", "mappingNode");
            }
        }
Esempio n. 11
0
        static int Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("usage: ManipulateOidColumns mapping-file Guid|Auto");
                return(-1);
            }
            Console.WriteLine("ManipulateOidColums: args: " + args[0] + " " + args[1]);


            if (!File.Exists(args[0]))
            {
                Console.WriteLine("can't find file " + args[0]);
                return(-2);
            }

            try
            {
                NDOMapping mapping = new NDOMapping(args[0]);
                foreach (Class cl in mapping.Classes)
                {
                    if (cl.Oid.OidColumns.Count == 1)
                    {
                        OidColumn oidCol = (OidColumn)cl.Oid.OidColumns[0];

                        if (cl.FullName == "NDOObjectIdTestClasses.HintOwner")
                        {
                            oidCol.AutoIncremented = false;
                            oidCol.NetType         = "System.Int32,mscorlib";
                        }
                        else if (cl.FullName == "NDOObjectIdTestClasses.ClassWithHint")
                        {
                            oidCol.AutoIncremented = false;
                            oidCol.NetType         = "System.Guid,mscorlib";
                        }
                        else if (cl.FullName == "NDOObjectIdTestClasses.AbstractBaseGuid" || cl.FullName == "NDOObjectIdTestClasses.DerivedGuid")
                        {
                            oidCol.AutoIncremented = false;
                            oidCol.NetType         = "System.Guid,mscorlib";
                            oidCol.FieldName       = "guid";
                        }
                        else if (cl.FullName == "NDOObjectIdTestClasses.NDOoidAndHandler")
                        {
                            oidCol.AutoIncremented = false;
                            oidCol.NetType         = "System.Guid,mscorlib";
                            oidCol.FieldName       = "myId";
                        }
                        else if (cl.FullName == "NDOObjectIdTestClasses.ObjectOwner")
                        {
                            oidCol.AutoIncremented = false;
                            oidCol.NetType         = "System.Int32,mscorlib";
                        }
                        else
                        {
                            if (args[1] == "Guid")
                            {
                                oidCol.AutoIncremented = false;
                                oidCol.NetType         = "System.Guid,mscorlib";
                            }
                            else
                            {
                                oidCol.AutoIncremented = true;
                                oidCol.NetType         = null;
                            }
                        }
                    }
                }
                mapping.Save();
            }
            catch (Exception ex)
            {
                Console.WriteLine("ManipulateTableNames: " + ex.Message);
                return(-3);
            }
            return(0);
        }
Esempio n. 12
0
        /// <summary>
        /// Initializes the PersistenceHandler
        /// </summary>
        /// <param name="ndoMapping">Mapping information.</param>
        /// <param name="t">Type for which the Handler is constructed.</param>
        /// <param name="disposeCallback">Method to be called at the end of the usage. The method can be used to push back the object to the PersistenceHandlerPool.</param>
        public void Initialize(NDOMapping ndoMapping, Type t, Action <Type, IPersistenceHandler> disposeCallback)
        {
            this.ndoMapping               = ndoMapping;
            this.classMapping             = ndoMapping.FindClass(t);
            this.timeStampColumn          = classMapping.TimeStampColumn;
            this.typeNameColumn           = classMapping.TypeNameColumn;
            this.hasAutoincrementedColumn = false;
            foreach (OidColumn oidColumn in this.classMapping.Oid.OidColumns)
            {
                if (oidColumn.AutoIncremented)
                {
                    this.hasAutoincrementedColumn = true;
                    this.autoIncrementColumn      = oidColumn;
                    break;
                }
            }
            this.hasGuidOid = this.classMapping.HasGuidOid;
            this.tableName  = classMapping.TableName;
            Connection connInfo = ndoMapping.FindConnection(classMapping);

            this.provider           = ndoMapping.GetProvider(connInfo);
            this.qualifiedTableName = provider.GetQualifiedTableName(tableName);
            // The connection object will be initialized by the pm, to
            // enable connection string housekeeping.
            // CheckTransaction is the place, where this happens.
            this.conn = null;

            var columnListGenerator = CreateColumnListGenerator(classMapping);

            this.hollowFields             = columnListGenerator.HollowFields;
            this.hollowFieldsWithAlias    = columnListGenerator.HollowFieldsWithAlias;
            this.namedParamList           = columnListGenerator.ParamList;
            this.fieldList                = columnListGenerator.BaseList;
            this.selectFieldList          = columnListGenerator.SelectList;
            this.selectFieldListWithAlias = columnListGenerator.SelectListWithAlias;
            this.guidlength               = provider.GetDefaultLength(typeof(Guid));
            if (this.guidlength == 0)
            {
                this.guidlength = provider.SupportsNativeGuidType ? 16 : 36;
            }
            this.disposeCallback = disposeCallback;


            this.selectCommand = provider.NewSqlCommand(conn);
            this.insertCommand = provider.NewSqlCommand(conn);
            this.updateCommand = provider.NewSqlCommand(conn);
            this.deleteCommand = provider.NewSqlCommand(conn);
            this.dataAdapter   = provider.NewDataAdapter(selectCommand, updateCommand, insertCommand, deleteCommand);
            this.type          = t;

            CollectFields();                    // Alle Feldinformationen landen in persistentField
            // determine the relations, which have a foreign key
            // column in the table of the given class
            relationInfos = new RelationCollector(this.classMapping)
                            .CollectRelations().ToList();


            GenerateSelectCommand();
            GenerateInsertCommand();
            GenerateUpdateCommand();
            GenerateDeleteCommand();
        }
Esempio n. 13
0
        private void GenerateUpdateCommand()
        {
            string sql;

            NDO.Mapping.Field fieldMapping;

            sql = @"UPDATE {0} SET {1} WHERE ({2})";


            //{0} = Tabellenname: Mitarbeiter
            //{1} = Zuweisungsliste: vorname = @vorname, nachname = @nachname
            //{2} = Where-Bedingung: id = @Original_id [ AND TimeStamp = @Original_timestamp ]
            AssignmentGenerator assignmentGenerator = new AssignmentGenerator(this.classMapping);
            string zuwListe = assignmentGenerator.Result;

            foreach (var e in this.persistentFields)
            {
                Type memberType;
                if (e.Value is FieldInfo)
                {
                    memberType = ((FieldInfo)e.Value).FieldType;
                }
                else
                {
                    memberType = ((PropertyInfo)e.Value).PropertyType;
                }

                fieldMapping = classMapping.FindField((string)e.Key);
                if (fieldMapping != null)
                {
                    provider.AddParameter(updateCommand, provider.GetNamedParameter("U_" + fieldMapping.Column.Name), fieldMapping.ColumnDbType, ParameterLength(fieldMapping, memberType), fieldMapping.Column.Name);
                }
            }

            foreach (RelationFieldInfo ri in relationInfos)
            {
                Relation r = ri.Rel;
                if (r.Multiplicity == RelationMultiplicity.Element && r.MappingTable == null ||
                    r.Multiplicity == RelationMultiplicity.List && r.MappingTable == null && r.Parent.FullName != classMapping.FullName)
                {
                    foreach (ForeignKeyColumn fkColumn in r.ForeignKeyColumns)
                    {
                        Type systemType = fkColumn.SystemType;
                        provider.AddParameter(updateCommand, provider.GetNamedParameter("U_" + fkColumn.Name), provider.GetDbType(systemType), provider.GetDefaultLength(systemType), fkColumn.Name);
                    }
                    if (r.ForeignKeyTypeColumnName != null)
                    {
                        provider.AddParameter(updateCommand, provider.GetNamedParameter("U_" + r.ForeignKeyTypeColumnName), provider.GetDbType(typeof(int)), provider.GetDefaultLength(typeof(int)), r.ForeignKeyTypeColumnName);
                    }
                }
            }

            string where = string.Empty;

            if (this.timeStampColumn != null)
            {
                if (provider.UseNamedParams)
                {
                    where += provider.GetQuotedName(timeStampColumn) + " = " + provider.GetNamedParameter("U_Original_" + timeStampColumn) + " AND ";
                }
                else
                {
                    where += provider.GetQuotedName(timeStampColumn) + " = ? AND ";
                }
                // The new timestamp value as parameter
                provider.AddParameter(updateCommand, provider.GetNamedParameter("U_" + timeStampColumn), provider.GetDbType(typeof(Guid)), guidlength, timeStampColumn);
                provider.AddParameter(updateCommand, provider.GetNamedParameter("U_Original_" + timeStampColumn), provider.GetDbType(typeof(Guid)), guidlength, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), timeStampColumn, System.Data.DataRowVersion.Original, null);
            }

            int oidCount = classMapping.Oid.OidColumns.Count;

            for (int i = 0; i < oidCount; i++)
            {
                OidColumn oidColumn = (OidColumn)classMapping.Oid.OidColumns[i];
                // Oid as parameter
                provider.AddParameter(updateCommand, provider.GetNamedParameter("U_Original_" + oidColumn.Name), provider.GetDbType(oidColumn.SystemType), oidColumn.TypeLength, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), oidColumn.Name, System.Data.DataRowVersion.Original, null);
                if (provider.UseNamedParams)
                {
                    where += provider.GetQuotedName(oidColumn.Name) + " = " + provider.GetNamedParameter("U_Original_" + oidColumn.Name);
                }
                else
                {
                    where += provider.GetQuotedName(oidColumn.Name) + " = ?";
                }

                Relation r = oidColumn.Relation;
                if (!this.hasGuidOid && r != null && r.ForeignKeyTypeColumnName != null)
                {
                    where += " AND " +
                             provider.GetQuotedName(r.ForeignKeyTypeColumnName) + " = " + provider.GetNamedParameter("U_Original_" + r.ForeignKeyTypeColumnName);
                    provider.AddParameter(updateCommand, provider.GetNamedParameter("U_Original_" + r.ForeignKeyTypeColumnName), provider.GetDbType(typeof(int)), provider.GetDefaultLength(typeof(int)), System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), r.ForeignKeyTypeColumnName, System.Data.DataRowVersion.Original, null);
                }

                if (i < oidCount - 1)
                {
                    where += " AND ";
                }
            }
            //else
            //{
            //    // Dual oids are defined using two relations.
            //    MultiKeyHandler dkh = new MultiKeyHandler(this.classMapping);

            //    for (int i = 0; i < 2; i++)
            //    {
            //        where += provider.GetQuotedName(dkh.ForeignKeyColumnName(i)) + " = " + provider.GetNamedParameter("U_Original_" + dkh.ForeignKeyColumnName(i));
            //        provider.AddParameter(updateCommand, provider.GetNamedParameter("U_Original_" + dkh.ForeignKeyColumnName(i)), provider.GetDbType(dkh.GetClass(i).Oid.FieldType), dkh.GetClass(i).Oid.TypeLength, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), dkh.ForeignKeyColumnName(i), System.Data.DataRowVersion.Original, null);
            //        if (dkh.ForeignKeyTypeColumnName(i) != null && dkh.GetClass(i).Oid.FieldType != typeof(Guid))
            //        {
            //            where += " AND " +
            //                provider.GetQuotedName(dkh.ForeignKeyTypeColumnName(i)) + " = " + provider.GetNamedParameter("U_Original_" + dkh.ForeignKeyTypeColumnName(i));
            //            provider.AddParameter(updateCommand, provider.GetNamedParameter("U_Original_" + dkh.ForeignKeyTypeColumnName(i)), provider.GetDbType(typeof(int)), provider.GetDefaultLength(typeof(int)), System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), dkh.ForeignKeyTypeColumnName(i), System.Data.DataRowVersion.Original, null);
            //        }
            //        if (i == 0)
            //            where += " AND ";
            //    }
            //}

            sql = string.Format(sql, qualifiedTableName, zuwListe, where);
            //Console.WriteLine(sql);
            this.updateCommand.CommandText = sql;
        }