示例#1
0
        public override void DeepCopy(IMap mapObject)
        {
            IColumnMap columnMap = (IColumnMap)mapObject;

            Copy(columnMap);
            DoDeepCopy(columnMap);
        }
示例#2
0
        public SqlOrderByItem AddSqlOrderByItem(IColumnMap columnMap, bool descending)
        {
            SqlColumnAlias          sqlColumnAlias          = this.SqlStatement.GetSqlColumnAlias(columnMap);
            SqlColumnAliasReference sqlColumnAliasReference = new SqlColumnAliasReference(sqlColumnAlias);

            return(AddSqlOrderByItem(sqlColumnAliasReference, descending));
        }
示例#3
0
        /// <summary>
        /// Convert <paramref name="dataTable"/> to <see cref="JArray"/> using <paramref name="mappingTemplate"/>.
        /// </summary>
        /// <returns>The jarray.</returns>
        /// <param name="dataTable">Data table.</param>
        /// <param name="mappingTemplate">Mapping template.</param>
        public static JArray ToJarray(this DataTable dataTable, IMappingTemplate mappingTemplate)
        {
            if (dataTable is null)
            {
                throw new NullReferenceException(nameof(dataTable));
            }

            if (mappingTemplate is null)
            {
                throw new ArgumentNullException(nameof(mappingTemplate));
            }

            var jArray = new JArray();

            foreach (DataRow row in dataTable.Rows)
            {
                var jObject = new JObject();

                int colIndex = 0;

                foreach (DataColumn column in dataTable.Columns)
                {
                    IColumnMap columnMap = null;

                    if (mappingTemplate.UseColumnIndex)
                    {
                        columnMap = mappingTemplate.GetMap(columnIndex: colIndex);
                    }
                    else
                    {
                        columnMap = mappingTemplate.GetMap(columnName: column.ColumnName);
                    }

                    if (columnMap is null)
                    {
                        continue;
                    }

                    var value = string.Empty;

                    if (columnMap.NormalizeValue)
                    {
                        value = row[column].ToString().Trim();
                    }
                    else
                    {
                        value = row[column].ToString();
                    }

                    jObject.Add(new JProperty(columnMap.PropertyName, row[column].ToString()));

                    colIndex++;
                }

                colIndex = 0;
                jArray.Add(jObject);
            }
            return(jArray);
        }
示例#4
0
        protected override string GetParameterName(IPropertyMap propertyMap, IColumnMap columnMap, string prefix)
        {
            string name = prefix;

            name = name + propertyMap.Name;
            name = name + "_" + columnMap.Name;
            name = ":" + name;
            return(name);
        }
示例#5
0
        public SqlColumn GetSqlColumn(IColumnMap columnMap)
        {
            SqlColumn sqlColumn = FindSqlColumn(columnMap.Name);

            if (sqlColumn == null)
            {
                sqlColumn = new SqlColumn(this, columnMap);
            }
            return(sqlColumn);
        }
示例#6
0
        public virtual IColumnMap MustGetPrimaryKeyColumnMap()
        {
            IColumnMap columnMap = GetPrimaryKeyColumnMap();

            if (columnMap == null)
            {
                throw new MappingException("Could not find column " + m_PrimaryKeyTable + "." + m_PrimaryKeyColumn + ", specified as primary column for foreign key column " + this.TableMap.Name + "." + this.Name + ", in map file!");
            }

            return(columnMap);
        }
示例#7
0
        public virtual IColumnMap MustGetColumnMap(string findName)
        {
            IColumnMap columnMap = GetColumnMap(findName);

            if (columnMap == null)
            {
                throw new MappingException("Could not find column " + findName + " in table " + m_name + " in map file!");
            }

            return(columnMap);
        }
示例#8
0
        public SqlColumn GetSqlColumn(IColumnMap columnMap)
        {
            SqlTable  sqlTable  = GetSqlTable(columnMap.TableMap);
            SqlColumn sqlColumn = FindSqlColumn(sqlTable, columnMap.Name);

            if (sqlColumn == null)
            {
                sqlColumn = new SqlColumn(sqlTable, columnMap);
            }
            return(sqlColumn);
        }
示例#9
0
        /// <summary>
        /// Adds <paramref name="columnMap"/> to <see cref="Maps"/>.
        /// </summary>
        /// <param name="columnMap">Column map.</param>
        public void Add(IColumnMap columnMap)
        {
            if (columnMap is null)
            {
                throw new ArgumentNullException(nameof(columnMap));
            }

            if (!_columnMaps.Contains(columnMap))
            {
                _columnMaps.Add(columnMap);
            }
        }
示例#10
0
        /// <summary>
        /// Removes the <paramref name="columnMap"/> from <see cref="Maps"/>
        /// </summary>
        /// <param name="columnMap">Column map.</param>
        public void Remove(IColumnMap columnMap)
        {
            if (columnMap is null)
            {
                throw new ArgumentNullException(nameof(columnMap));
            }

            if (_columnMaps.Contains(columnMap))
            {
                _columnMaps.Remove(columnMap);
            }
        }
        private void SetAllowNulls(IColumnMap columnMap, bool value)
        {
            ILoggingService loggingService = engine.GetService <ILoggingService>();

            if (loggingService != null)
            {
                loggingService.LogInfo(this, String.Format("Setting rule for column {0}.{1}: nullable = {2}.",
                                                           columnMap.TableMap.Name, columnMap.Name, value.ToString()));
            }

            columnMap.AllowNulls = value;
        }
        private void SetAutoIncreaser(IColumnMap columnMap, bool value)
        {
            ILoggingService loggingService = engine.GetService <ILoggingService>();

            if (loggingService != null)
            {
                loggingService.LogInfo(this, String.Format("Setting rule for column {0}.{1}: auto increaser = {2}.",
                                                           columnMap.TableMap.Name, columnMap.Name, value.ToString()));
            }

            columnMap.IsAutoIncrease = value;
        }
示例#13
0
        public virtual SqlColumnAlias GetPropertyColumn(IPropertyMap propertyMap, object hash)
        {
            if (hash == null)
            {
                hash = propertyMap;
            }
            SqlTableAlias tbl = sqlEmitter.GetTableAlias(propertyMap.MustGetTableMap(), hash);

            IColumnMap columnMap = propertyMap.GetColumnMap();

            return(tbl.GetSqlColumnAlias(columnMap));
        }
        private void SetPrimaryKey(IColumnMap columnMap, bool value)
        {
            ILoggingService loggingService = engine.GetService <ILoggingService>();

            if (loggingService != null)
            {
                loggingService.LogInfo(this, String.Format("Setting rule for column {0}.{1}: primary key = {2}.",
                                                           columnMap.TableMap.Name, columnMap.Name, value.ToString()));
            }

            columnMap.IsPrimaryKey = value;
        }
示例#15
0
        public SqlColumnAlias GetSqlColumnAlias(IColumnMap columnMap, string alias, string tableAlias)
        {
            SqlTableAlias  sqlTableAlias  = GetSqlTableAlias(columnMap.TableMap, tableAlias);
            SqlColumnAlias sqlColumnAlias = FindSqlColumnAlias(sqlTableAlias, columnMap.Name, alias, tableAlias);

            if (sqlColumnAlias == null)
            {
                SqlColumn sqlColumn = GetSqlColumn(columnMap);
                sqlColumnAlias = new SqlColumnAlias(sqlTableAlias, sqlColumn, alias);
            }
            return(sqlColumnAlias);
        }
示例#16
0
        protected SqlParameter CreateParameter(IColumnMap columnMap, object value)
        {
            if (columnMap.Serializer != null)
                value = columnMap.Serializer.Serialize(value);

            return new SqlParameter(GetParameterName(columnMap.ColumnName), value)
                {
                    IsNullable = columnMap.IsNullable,
                    Precision = columnMap.ColumnPrecision,
                    Scale = columnMap.ColumnScale,
                    Size = columnMap.ColumnMaxLength
                };
        }
示例#17
0
		/// <summary>
		/// Converts database type to C# type.
		/// </summary>
		/// <param name="columnMap">The column map.</param>
		/// <returns>The C# type.</returns>
		public static string GetDataType(IColumnMap columnMap)
		{
			switch (columnMap.DataType)
			{
				case DbType.AnsiString:
					return "varchar(" + columnMap.Length + ") character set latin1";
				case DbType.AnsiStringFixedLength:
					return "char(" + columnMap.Length + ") character set latin1";
				case DbType.Binary:
					return "blob(" + columnMap.Length + ")";
				case DbType.Boolean:
					return "bit";
				case DbType.Byte:
					return "tinyint unsigned";
				case DbType.Date:
					return "date";
				case DbType.DateTime:
					return "datetime";
				case DbType.Decimal:
					return "decimal";
				case DbType.Double:
					return "double";
				case DbType.Int16:
					return "smallint";
				case DbType.Int32:
					return "int";
				case DbType.Int64:
					return "bigint";
				case DbType.SByte:
					return "tinyint";
				case DbType.Single:
					return "float";
				case DbType.String:
					return "varchar(" + columnMap.Length + ") character set utf8";
				case DbType.StringFixedLength:
					return "char(" + columnMap.Length + ") character set utf8";
				case DbType.Time:
					return "timespan";
				case DbType.UInt16:
					return "smallint unsigned";
				case DbType.UInt32:
					return "int unsigned";
				case DbType.UInt64:
					return "bigint unsigned";
				default:
					throw new ArgumentException("unknown db data type: " + columnMap.DataType.ToString(), "columnMap");
			}
		}
示例#18
0
        public SqlColumnAlias GetSqlColumnAlias(IColumnMap columnMap, string alias)
        {
            if (columnMap == null)
            {
                throw new ArgumentNullException("columnMap");
            }

            SqlColumnAlias sqlColumnAlias = FindSqlColumnAlias(columnMap.Name, alias);

            if (sqlColumnAlias == null)
            {
                SqlColumn sqlColumn = this.SqlTable.GetSqlColumn(columnMap);
                sqlColumnAlias = new SqlColumnAlias(this, sqlColumn, alias);
            }
            return(sqlColumnAlias);
        }
示例#19
0
        private object[] GetKeyParts(Type type, string identity)
        {
            IClassMap classMap     = this.Context.DomainMap.MustGetClassMap(type);
            IList     idProperties = classMap.GetIdentityPropertyMaps();

            if (idProperties.Count < 1)
            {
                throw new NPersistException(string.Format("Type {0} has no known identity properties!", type.ToString()));
            }
            if (idProperties.Count > 1)
            {
                return(GetKeyParts(type, identity, classMap, idProperties));
            }

            IPropertyMap idPropertyMap = (IPropertyMap)idProperties[0];

            object[] keyParts = new object[2];
            keyParts[0] = type;
            bool found = false;

            if (idPropertyMap.GetIsAssignedBySource())
            {
                IColumnMap columnMap = idPropertyMap.GetColumnMap();
                if (columnMap != null)
                {
                    if (columnMap.IsAutoIncrease)
                    {
                        if (Util.IsNumeric(identity))
                        {
                            keyParts[1] = this.Context.ObjectManager.ConvertValueToType(type, ((IPropertyMap)idProperties[0]), identity);
                        }
                        else
                        {
                            keyParts[1] = identity;
                        }
                        found = true;
                    }
                }
            }
            if (!found)
            {
                keyParts[1] = this.Context.ObjectManager.ConvertValueToType(type, ((IPropertyMap)idProperties[0]), identity);
            }
            return(keyParts);
        }
示例#20
0
        private void ValidateDatabaseDateRange(object obj, IPropertyMap propertyMap, IList exceptions)
        {
            if (propertyMap.Column.Length > 0)
            {
                IObjectManager om        = this.Context.ObjectManager;
                IColumnMap     columnMap = propertyMap.GetColumnMap();
                if (columnMap != null)
                {
                    if (columnMap.DataType.Equals(DbType.DateTime) || columnMap.DataType.Equals(DbType.Time) || columnMap.DataType.Equals(DbType.Date))
                    {
                        if (!(om.GetNullValueStatus(obj, propertyMap.Name)))
                        {
                            ISourceMap sourceMap = propertyMap.GetSourceMap();
                            if (sourceMap != null)
                            {
                                object rawValue = om.GetPropertyValue(obj, propertyMap.Name);
                                if (rawValue == null)
                                {
                                    //all ok
                                }
                                else
                                {
                                    DateTime value = (DateTime)rawValue;
                                    if (sourceMap.SourceType == SourceType.MSSqlServer)
                                    {
                                        DateTime minDate = new DateTime(1753, 1, 1, 0, 0, 0);
                                        if (value < minDate)
                                        {
                                            string template = "Validation error in object {0}.{1} , property {2}: " + Environment.NewLine + "Sql server can not handle date/time values lower than 1753-01-01 00:00:00";
                                            string result   = String.Format(
                                                template,
                                                propertyMap.ClassMap.Name,
                                                this.Context.ObjectManager.GetObjectKeyOrIdentity(obj),
                                                propertyMap.Name);

                                            HandleException(obj, propertyMap.Name, exceptions, new ValidationException(result), minDate, value, value);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Generates the 'create' method.
        /// </summary>
        /// <param name="file">The file.</param>
        /// <param name="classMap">The class map.</param>
        public override void GenerateCreate(StreamWriter file, IClassMap classMap)
        {
            bool first = true;

            // create fields list
            StringBuilder valuesQuery = new StringBuilder(16 * classMap.PropertyMaps.Count);

            foreach (IPropertyMap propertyMap in classMap.PropertyMaps)
            {
                if (!first)
                {
                    valuesQuery.Append(",");
                }

                valuesQuery.Append("'\" + m_state.EscapeString(obj." + propertyMap.Name + ".ToString()) + \"'");

                first = false;
            }

            string sqlCommand = "INSERT INTO `" + classMap.GetTableMap().Name + "`"
                                + " VALUES (" + valuesQuery + ");";

            // find auto_incremented values
            IPropertyMap autoIncrementProperty = null;

            foreach (IPropertyMap propertyMap in classMap.PropertyMaps)
            {
                IColumnMap columnMap = propertyMap.GetColumnMap();
                if (columnMap.IsAutoIncrease)
                {
                    // just one auto_increment column
                    autoIncrementProperty = propertyMap;
                    break;
                }
            }

            file.WriteLine("			m_state.ExecuteNonQuery(");
            file.WriteLine("				\""+ sqlCommand + "\");");

            if (autoIncrementProperty != null)
            {
                file.WriteLine("			object insertedId = m_state.ExecuteScalar(\"SELECT LAST_INSERT_ID();\");");
                file.WriteLine("			obj."+ autoIncrementProperty.Name + " = (" + ClassUtility.ConvertColumnTypeToCsType(autoIncrementProperty.GetColumnMap().DataType) + ") (long) insertedId;");
            }
        }
示例#22
0
        public virtual void GetListPropertySubselectAndAlias(IPropertyMap propertyMap, object hash, Hashtable columns, ArrayList order, string propPath, string suggestion)
        {
            if (hash == null)
            {
                hash = propertyMap;
            }
            ITableMap     listTableMap   = propertyMap.MustGetTableMap();
            ITableMap     parentTableMap = propertyMap.ClassMap.MustGetTableMap();
            SqlTableAlias parentTable    = sqlEmitter.GetTableAlias(parentTableMap, hash);

            SqlSelectStatement subSelect = new SqlSelectStatement(parentTableMap.SourceMap);

            //Hmmm....can an alias be redefined in a subselect?
            //SqlTableAlias listTable = subSelect.GetSqlTableAlias(listTableMap, "cnt" + subSelect.GetNextTableAliasIndex());
            SqlTableAlias listTable = subSelect.GetSqlTableAlias(listTableMap, "cnt" + sqlEmitter.Select.GetNextTableAliasIndex());

            SqlCountFunction count = new SqlCountFunction();

            subSelect.SqlSelectClause.AddSqlAliasSelectListItem(count);

            subSelect.SqlFromClause.AddSqlAliasTableSource(listTable);

            foreach (IColumnMap fkIdColumnMap in propertyMap.GetAllIdColumnMaps())
            {
                IColumnMap idColumnMap = fkIdColumnMap.MustGetPrimaryKeyColumnMap();

                SqlColumnAlias     fkIdColumn = listTable.GetSqlColumnAlias(fkIdColumnMap);
                SqlColumnAlias     idColumn   = parentTable.GetSqlColumnAlias(idColumnMap);
                SqlSearchCondition search     = subSelect.SqlWhereClause.GetNextSqlSearchCondition();

                search.GetSqlComparePredicate(fkIdColumn, SqlCompareOperatorType.Equals, idColumn);
            }

            if (suggestion == "")
            {
                suggestion = propPath;
            }

            SqlAliasSelectListItem countAlias = this.sqlEmitter.Select.SqlSelectClause.AddSqlAliasSelectListItem(subSelect, suggestion);

            this.sqlEmitter.PropertyColumnMap[propPath] = countAlias.SqlExpressionAlias.Alias;
        }
        public void SetColumnMetaData(string tableName, string columnName, ColumnMetaData columnMetaData, object value)
        {
            ITableMap  tableMap  = GetDomainMap().GetSourceMap().MustGetTableMap(tableName);
            IColumnMap columnMap = tableMap.MustGetColumnMap(columnName);

            switch (columnMetaData)
            {
            case ColumnMetaData.PrimaryKey:
                SetPrimaryKey(columnMap, (bool)value);
                break;

            case ColumnMetaData.Nullable:
                SetAllowNulls(columnMap, (bool)value);
                break;

            case ColumnMetaData.AutoIncreaser:
                SetAutoIncreaser(columnMap, (bool)value);
                break;

            default:
                throw new Exception("Unknown column meta data type" + columnMetaData.ToString());
            }
        }
示例#24
0
        public override void Copy(IMap mapObject)
        {
            IColumnMap columnMap = (IColumnMap)mapObject;

            columnMap.AllowNulls       = this.AllowNulls;
            columnMap.DataType         = this.DataType;
            columnMap.Format           = this.Format;
            columnMap.IsAutoIncrease   = this.IsAutoIncrease;
            columnMap.IsForeignKey     = this.IsForeignKey;
            columnMap.IsPrimaryKey     = this.IsPrimaryKey;
            columnMap.Length           = this.Length;
            columnMap.Name             = this.Name;
            columnMap.Increment        = this.Increment;
            columnMap.Seed             = this.Seed;
            columnMap.DefaultValue     = this.DefaultValue;
            columnMap.Precision        = this.Precision;
            columnMap.Scale            = this.Scale;
            columnMap.ForeignKeyName   = this.ForeignKeyName;
            columnMap.PrimaryKeyColumn = this.PrimaryKeyColumn;
            columnMap.PrimaryKeyTable  = this.PrimaryKeyTable;
            columnMap.Sequence         = this.Sequence;
            columnMap.IsFixedLength    = this.IsFixedLength;
            columnMap.SpecificDataType = this.SpecificDataType;
        }
示例#25
0
		public virtual void SetIdColumnMap(IColumnMap value)
		{
			m_IdColumn = value.Name;
		}
 public string GetPropertyNameFromColumn(IColumnMap columnMap)
 {
     return(TableToClassName(columnMap.Name));
 }
示例#27
0
 protected virtual void DoDeepCopy(IColumnMap columnMap)
 {
 }
		protected virtual string SerializeColumnMap(IColumnMap columnMap)
		{
			StringBuilder xml = new StringBuilder();
			xml.Append("      <column name=\"" + columnMap.Name + "\""); // do not localize
			if (columnMap.IsPrimaryKey)
			{
				xml.Append(" primary=\"true\"");
			}
			xml.Append(" type=\"" + columnMap.DataType.ToString() + "\""); // do not localize
			xml.Append(" prec=\"" + columnMap.Precision + "\""); // do not localize
			if (columnMap.AllowNulls)
			{
				xml.Append(" allow-null=\"true\"");
			}
			xml.Append(" length=\"" + columnMap.Length + "\""); // do not localize
			xml.Append(" scale=\"" + columnMap.Scale + "\""); // do not localize
			if (columnMap.IsFixedLength)
			{
				xml.Append(" fixed-length=\"true\"");
			}
			if (columnMap.IsForeignKey)
			{
				xml.Append(" foreign=\"true\"");
				if (columnMap.PrimaryKeyTable.Length > 0)
				{
					xml.Append(" primary-table=\"" + columnMap.PrimaryKeyTable + "\""); // do not localize
				}
				if (columnMap.PrimaryKeyColumn.Length > 0)
				{
					xml.Append(" primary-column=\"" + columnMap.PrimaryKeyColumn + "\""); // do not localize
				}
				if (columnMap.ForeignKeyName.Length > 0)
				{
					xml.Append(" foreign-key=\"" + columnMap.ForeignKeyName + "\""); // do not localize
				}
			}
			if (columnMap.Sequence.Length > 0)
			{
				xml.Append(" sequence=\"" + columnMap.Sequence + "\""); // do not localize
			}
			if (columnMap.IsAutoIncrease)
			{
				xml.Append(" auto-inc=\"true\"");
				xml.Append(" seed=\"" + columnMap.Seed + "\""); // do not localize
				xml.Append(" inc=\"" + columnMap.Increment + "\""); // do not localize
			}
			if (columnMap.DefaultValue.Length > 0)
			{
				xml.Append(" default=\"" + columnMap.DefaultValue + "\""); // do not localize
			}
			if (columnMap.Format.Length > 0)
			{
				xml.Append(" format=\"" + columnMap.Format + "\""); // do not localize
			}
			if (columnMap.SpecificDataType.Length > 0)
			{
				xml.Append(" specific-type=\"" + columnMap.SpecificDataType + "\""); // do not localize
			}
			if (columnMap.MetaData.Count > 0)
			{
				xml.Append(">\r\n");
				xml.Append(SerializeMetaData(columnMap.MetaData, "        "));
				xml.Append("    </column>\r\n"); // do not localize
			}
			else
			{
				xml.Append(" />\r\n"); // do not localize
			}
			return xml.ToString();
		}
示例#29
0
		public virtual ArrayList GetPropertyMapsForColumn(IColumnMap columnMap)
		{
			return GetPropertyMapsForColumn(columnMap, false);
		}
 public virtual void Visit(IColumnMap columnMap)
 {
     VerifyColumnMap(columnMap);
 }
示例#31
0
 public SqlColumnAlias GetSqlColumnAlias(IColumnMap columnMap, string alias, string tableAlias)
 {
     SqlTableAlias sqlTableAlias = GetSqlTableAlias(columnMap.TableMap, tableAlias);
     SqlColumnAlias sqlColumnAlias = FindSqlColumnAlias(sqlTableAlias, columnMap.Name, alias, tableAlias) ;
     if (sqlColumnAlias == null)
     {
         SqlColumn sqlColumn = GetSqlColumn(columnMap);
         sqlColumnAlias = new SqlColumnAlias(sqlTableAlias, sqlColumn, alias) ;
     }
     return sqlColumnAlias;
 }
 public void Visit(IColumnMap columnMap)
 {
     ;
 }
 protected override string GetParameterName(IPropertyMap propertyMap, IColumnMap columnMap, string prefix)
 {
     string name = prefix;
     name = name + propertyMap.Name;
     name = name + "_" + columnMap.Name;
     name = ":" + name;
     return name;
 }
 public IPropertyMap MustGetPropertyMapForColumnMap(IColumnMap columnMap)
 {
     throw new Exception("The method or operation is not implemented.");
 }
示例#35
0
 public virtual SqlColumnAlias GetPropertyColumnAlias(SqlTableAlias tableAlias, string propertyPath, IColumnMap columnMap, string suggestion)
 {
     return(sqlEmitter.GetColumnAlias(tableAlias, columnMap, propertyPath, GetAliasSuggestionFromPropertyPath(propertyPath, suggestion)));
 }
示例#36
0
        public virtual void GetPropertyColumnNamesAndAliases(IPropertyMap propertyMap, object hash, Hashtable columns, ArrayList order, string path, string propPath, string suggestion)
        {
            if (hash == null)
            {
                hash = propertyMap;
            }
            SqlTableAlias tbl           = sqlEmitter.GetTableAlias(propertyMap.MustGetTableMap(), hash);
            IList         columnAliases = new ArrayList();

            if (propertyMap.IsIdentity)
            {
                IClassMap  classMap      = propertyMap.ClassMap;
                IColumnMap typeColumnMap = classMap.GetTypeColumnMap();
                if (typeColumnMap != null)
                {
                    string         pathParent    = GetPathParent(path);
                    string         suggestedPath = pathParent.Length == 0 ? "NPersistTypeColumn" : pathParent + ".NPersistTypeColumn";
                    SqlColumnAlias column        = GetPropertyColumnAlias(tbl, suggestedPath, typeColumnMap, suggestedPath);
                    columnAliases.Add(column);
                }
            }

            if (suggestion == "")
            {
                suggestion = propPath;
            }
            //      bool hasTypeColumn = false;

            IPropertyMap inverse = propertyMap.GetInversePropertyMap();

            //Type column first
            if (inverse != null)
            {
                IColumnMap inverseTypeColumnMap = inverse.ClassMap.GetTypeColumnMap();
                foreach (IColumnMap columnMap in propertyMap.GetAllColumnMaps())
                {
                    if (inverseTypeColumnMap != null && inverseTypeColumnMap == columnMap.GetPrimaryKeyColumnMap())
                    {
                        string suggestionString;
                        suggestionString = propPath.Length == 0 ? "NPersistTypeColum" : propPath + ".NPersistTypeColumn";

                        SqlColumnAlias column = GetPropertyColumnAlias(tbl, path, columnMap, suggestionString);
                        columnAliases.Add(column);
                    }
                }
            }

            foreach (IColumnMap columnMap in propertyMap.GetAllColumnMaps())
            {
                if (inverse != null)
                {
                    IColumnMap inverseTypeColumnMap = inverse.ClassMap.GetTypeColumnMap();
                    if (inverseTypeColumnMap != null && inverseTypeColumnMap == columnMap.GetPrimaryKeyColumnMap())
                    {
                        continue;
                    }
                }

                string suggestionString;

                suggestionString = suggestion;

                SqlColumnAlias column = GetPropertyColumnAlias(tbl, path, columnMap, suggestionString);
                columnAliases.Add(column);
            }

            foreach (SqlColumnAlias column in columnAliases)
            {
                if (!(columns.ContainsKey(column)))
                {
                    columns[column] = column;
                    order.Add(column);

                    //Note: Important stuff, right here in nowhere-ville!!
                    if (this.sqlEmitter.PropertyColumnMap.ContainsKey(propPath))
                    {
                        ArrayList arrAliases;
                        if (this.sqlEmitter.PropertyColumnMap[propPath] is string)
                        {
                            arrAliases = new ArrayList();
                            arrAliases.Add(this.sqlEmitter.PropertyColumnMap[propPath]);
                            this.sqlEmitter.PropertyColumnMap[propPath] = arrAliases;
                        }
                        else
                        {
                            arrAliases = (ArrayList)this.sqlEmitter.PropertyColumnMap[propPath];
                        }
                        arrAliases.Add(column.Alias);
                    }
                    else
                    {
                        this.sqlEmitter.PropertyColumnMap[propPath] = column.Alias;
                    }
                }
            }
        }
示例#37
0
		public virtual IPropertyMap MustGetPropertyMapForColumnMap(IColumnMap columnMap)
		{
			IPropertyMap propertyMap = GetPropertyMapForColumnMap(columnMap);

			if (propertyMap == null)
				throw new MappingException("Could not find any property mapping to column " + columnMap.TableMap.Name + "." + columnMap.Name + " in the type " + this.GetFullName() + " in map file!");

			return propertyMap;
		}
        public SqlColumnAlias GetSqlColumnAlias(IColumnMap columnMap, string alias)
        {
            if (columnMap == null)
                throw new ArgumentNullException("columnMap");

            SqlColumnAlias sqlColumnAlias = FindSqlColumnAlias(columnMap.Name, alias) ;
            if (sqlColumnAlias == null)
            {
                SqlColumn sqlColumn = this.SqlTable.GetSqlColumn(columnMap);
                sqlColumnAlias = new SqlColumnAlias(this, sqlColumn, alias) ;
            }
            return sqlColumnAlias;
        }
示例#39
0
 public SqlColumn(SqlTable sqlTable, IColumnMap columnMap)
 {
     this.Parent    = sqlTable;
     this.columnMap = columnMap;
     sqlTable.SqlColumns.Add(this);
 }
 public virtual void VerifyColumnMap(IColumnMap columnMap)
 {
     if (columnMap.Name.Length < 1)
     {
         HandleVerifyException(columnMap, "Column name must not be empty! (Source: '" + columnMap.TableMap.SourceMap.Name + "', Table: '" + columnMap.TableMap.Name + "')", "Name"); // do not localize
     }
     if (columnMap.DataType == DbType.AnsiStringFixedLength || columnMap.DataType == DbType.StringFixedLength)
     {
         if (columnMap.Length < 1)
         {
             HandleVerifyException(columnMap, "Length for column with data type '" + columnMap.DataType.ToString() + "' must not be < 1! (Source: '" + columnMap.TableMap.SourceMap.Name + "', Table: '" + columnMap.TableMap.Name + "', column '" + columnMap.Name + "')", "DataType"); // do not localize
         }
     }
     if (columnMap.IsAutoIncrease)
     {
         if (!((columnMap.DataType == DbType.Int16 || columnMap.DataType == DbType.Int32 || columnMap.DataType == DbType.Int64)))
         {
             HandleVerifyException(columnMap, "Column is marked as auto increaser but data type is not an integer! (Source: '" + columnMap.TableMap.SourceMap.Name + "', Table: '" + columnMap.TableMap.Name + "', column '" + columnMap.Name + "')", "PrimaryKeyTable"); // do not localize
         }
     }
     if (columnMap.IsForeignKey)
     {
         if (columnMap.PrimaryKeyTable.Length < 1)
         {
             HandleVerifyException(columnMap, "Column is marked as foreign key but no primary key table for the column has been specified! (Source: '" + columnMap.TableMap.SourceMap.Name + "', Table: '" + columnMap.TableMap.Name + "', column '" + columnMap.Name + "')", "PrimaryKeyTable"); // do not localize
         }
         if (columnMap.PrimaryKeyColumn.Length < 1)
         {
             HandleVerifyException(columnMap, "Column is marked as foreign key but no primary key column for the column has been specified! (Source: '" + columnMap.TableMap.SourceMap.Name + "', Table: '" + columnMap.TableMap.Name + "', column '" + columnMap.Name + "')", "PrimaryKeyColumn"); // do not localize
         }
     }
     if (columnMap.PrimaryKeyTable.Length > 0)
     {
         if (columnMap.GetPrimaryKeyTableMap() == null)
         {
             HandleVerifyException(columnMap, "Primary key table not found! (Source: '" + columnMap.TableMap.SourceMap.Name + "', Table: '" + columnMap.TableMap.Name + "', Primary key table: '" + columnMap.PrimaryKeyTable + "', column '" + columnMap.Name + "')", "PrimaryKeyTable"); // do not localize
         }
     }
     if (columnMap.PrimaryKeyColumn.Length > 0)
     {
         if (columnMap.GetPrimaryKeyColumnMap() == null)
         {
             HandleVerifyException(columnMap, "Primary key column not found! (Source: '" + columnMap.TableMap.SourceMap.Name + "', Table: '" + columnMap.TableMap.Name + "', Primary key column: '" + columnMap.PrimaryKeyColumn + "', column '" + columnMap.Name + "')", "PrimaryKeyColumn"); // do not localize
         }
     }
 }
示例#41
0
 public SqlOrderByItem AddSqlOrderByItem(IColumnMap columnMap)
 {
     return(AddSqlOrderByItem(columnMap, false));
 }
示例#42
0
 public SqlColumnAlias GetSqlColumnAlias(IColumnMap columnMap, string alias, string tableAlias)
 {
     return this.sqlDatabase.GetSqlColumnAlias(columnMap, alias, tableAlias);
 }
示例#43
0
 public ParameterBuilder(IColumnMap columnMap, IParameterFactory parameterFactory)
 {
     _columnMap = columnMap;
     _parameterFactory = parameterFactory;
 }
示例#44
0
 public SqlColumnAlias GetSqlColumnAlias(IColumnMap columnMap)
 {
     return this.sqlDatabase.GetSqlColumnAlias(columnMap);
 }
示例#45
0
		public virtual ArrayList GetPropertyMapsForColumn(IColumnMap columnMap, bool noIdColumns)
		{
			ArrayList listPropertyMaps = new ArrayList();
			bool found = false;
			foreach (IClassMap classMap in m_ClassMaps)
			{
				foreach (IPropertyMap propertyMap in classMap.GetNonInheritedPropertyMaps())
				{
					if (propertyMap.GetColumnMap() == columnMap)
					{
						listPropertyMaps.Add(propertyMap);
					}
					else if (propertyMap.GetIdColumnMap() == columnMap)
					{
						if (!(noIdColumns))
						{
							listPropertyMaps.Add(propertyMap);
						}
					}
					else
					{
						foreach (IColumnMap testColumnMap in propertyMap.GetAdditionalColumnMaps())
						{
							if (testColumnMap == columnMap)
							{
								listPropertyMaps.Add(propertyMap);
								found = true;
								break;
							}
						}
						if (!(noIdColumns))
						{
							if (!(found))
							{
								foreach (IColumnMap testColumnMap in propertyMap.GetAdditionalIdColumnMaps())
								{
									if (testColumnMap == columnMap)
									{
										listPropertyMaps.Add(propertyMap);
										break;
									}
								}
							}
						}
					}
				}
			}
			return listPropertyMaps;
		}
 public virtual SqlColumnAlias GetPropertyColumnAlias(SqlTableAlias tableAlias, string propertyPath, IColumnMap columnMap, string suggestion)
 {
     return sqlEmitter.GetColumnAlias(tableAlias, columnMap, propertyPath, GetAliasSuggestionFromPropertyPath(propertyPath, suggestion))  ;
 }
示例#47
0
 public SqlColumnAlias GetSqlColumnAlias(IColumnMap columnMap, string alias)
 {
     return GetSqlColumnAlias(columnMap, alias, columnMap.TableMap.Name);
 }
示例#48
0
		public SqlColumnAlias GetColumnAlias(SqlTableAlias tableAlias, IColumnMap columnMap, object hash, string suggestion)
		{
			string alias;

			if (hash is IPropertyMap)
			{
				if (((IPropertyMap) hash).ClassMap == this.rootClassMap || ((IPropertyMap) hash).ClassMap == this.baseClassMap)
				{
					hash = this.baseClassMap;
				}				
			}
			else if (hash is TableJoin)
			{
				hash = ((TableJoin) hash).GetPropertyPath();
			}
			else if (hash is string)
			{
				if (((string)hash).Length < 1)
				{
					hash = this.baseClassMap;					
				}
			}

			if (!columnAliases.Contains(columnMap))
			{
				columnAliases[columnMap] = new Hashtable();
			}				

			Hashtable propertyColumnAliases = (Hashtable) columnAliases[columnMap];

			if (propertyColumnAliases.Contains(hash))
			{
				alias = (string) propertyColumnAliases[hash];
				return tableAlias.GetSqlColumnAlias(columnMap, alias);
			}

			if (suggestion.Length > 0)
				alias = suggestion;
			else
				alias = CreateColumnAlias();
			propertyColumnAliases[hash] = alias;
			return tableAlias.GetSqlColumnAlias(columnMap, alias);
		}
示例#49
0
 public SqlColumnAlias GetSqlColumnAlias(IColumnMap columnMap)
 {
     return GetSqlColumnAlias(columnMap, "", columnMap.TableMap.Name);
 }
示例#50
0
 public SqlColumn GetSqlColumn(IColumnMap columnMap)
 {
     return this.sqlDatabase.GetSqlColumn(columnMap);
 }
示例#51
0
        public override bool Compare(IMap compareTo)
        {
            if (compareTo == null)
            {
                return(false);
            }
            IColumnMap columnMap = (IColumnMap)compareTo;

            if (!(columnMap.AllowNulls == this.AllowNulls))
            {
                return(false);
            }
            if (!(columnMap.DataType == this.DataType))
            {
                return(false);
            }
            if (!(columnMap.Format == this.Format))
            {
                return(false);
            }
            if (!(columnMap.IsAutoIncrease == this.IsAutoIncrease))
            {
                return(false);
            }
            if (!(columnMap.IsForeignKey == this.IsForeignKey))
            {
                return(false);
            }
            if (!(columnMap.IsPrimaryKey == this.IsPrimaryKey))
            {
                return(false);
            }
            if (!(columnMap.Length == this.Length))
            {
                return(false);
            }
            if (!(columnMap.Name == this.Name))
            {
                return(false);
            }
            if (!(columnMap.Increment == this.Increment))
            {
                return(false);
            }
            if (!(columnMap.Seed == this.Seed))
            {
                return(false);
            }
            if (!(columnMap.DefaultValue == this.DefaultValue))
            {
                return(false);
            }
            if (!(columnMap.Precision == this.Precision))
            {
                return(false);
            }
            if (!(columnMap.Scale == this.Scale))
            {
                return(false);
            }
            if (!(columnMap.ForeignKeyName == this.ForeignKeyName))
            {
                return(false);
            }
            if (!(columnMap.PrimaryKeyColumn == this.PrimaryKeyColumn))
            {
                return(false);
            }
            if (!(columnMap.PrimaryKeyTable == this.PrimaryKeyTable))
            {
                return(false);
            }
            if (!(columnMap.Sequence == this.Sequence))
            {
                return(false);
            }
            if (!(columnMap.IsFixedLength == this.IsFixedLength))
            {
                return(false);
            }
            if (!(columnMap.SpecificDataType == this.SpecificDataType))
            {
                return(false);
            }
            return(true);
        }
 public SqlOrderByItem AddSqlOrderByItem(IColumnMap columnMap, bool descending)
 {
     SqlColumnAlias sqlColumnAlias = this.SqlStatement.GetSqlColumnAlias(columnMap);
     SqlColumnAliasReference sqlColumnAliasReference = new SqlColumnAliasReference(sqlColumnAlias);
     return AddSqlOrderByItem(sqlColumnAliasReference, descending);
 }
示例#53
0
		public virtual void SetTypeColumnMap(IColumnMap value)
		{
			m_TypeColumn = value.Name;
		}
 public SqlOrderByItem AddSqlOrderByItem(IColumnMap columnMap)
 {
     return AddSqlOrderByItem(columnMap, false);
 }
示例#55
0
		public virtual IPropertyMap GetPropertyMapForColumnMap(IColumnMap columnMap)
		{
			IColumnMap testColumnMap;
			foreach (IPropertyMap propertyMap in this.GetAllPropertyMaps())
			{
				testColumnMap = propertyMap.GetColumnMap();
				if (testColumnMap != null)
				{
					if (testColumnMap == columnMap)
					{
						return propertyMap;
					}
				}
				testColumnMap = propertyMap.GetIdColumnMap();
				if (testColumnMap != null)
				{
					if (testColumnMap == columnMap)
					{
						return propertyMap;
					}
				}
				foreach (IColumnMap checkColumnMap in propertyMap.GetAdditionalColumnMaps())
				{
					if (checkColumnMap == columnMap)
					{
						return propertyMap;
					}
				}
				foreach (IColumnMap checkColumnMap in propertyMap.GetAdditionalIdColumnMaps())
				{
					if (checkColumnMap == columnMap)
					{
						return propertyMap;
					}
				}
			}
			return null;
		}
 public void SetTypeColumnMap(IColumnMap value)
 {
     throw new Exception("The method or operation is not implemented.");
 }
 protected override string GetParameterName(IPropertyMap propertyMap, IColumnMap columnMap)
 {
     return GetParameterName(propertyMap, columnMap, "");
 }
示例#58
0
 private static string GetParameter(IColumnMap columnMap)
 {
     return "@" + columnMap.ColumnName;
 }
 private IParameterBuilder CreateParameterBuilder(object source, IColumnMap columnMap)
 {
     var value = PropertyGetter.Create(source.GetType(), columnMap.PropertyName).Get(source);
     var parameterFactory = value as IParameterFactory ?? new SingleParameterFactory("=", value);
     return new ParameterBuilder(columnMap, parameterFactory);
 }
 public SqlColumnAlias GetSqlColumnAlias(IColumnMap columnMap)
 {
     return GetSqlColumnAlias(columnMap, "");
 }