Пример #1
0
        private IEnumerable <ResultDefinition> partitionRecord(string record)
        {
            IEnumerable <ResultDefinition> validationResults = new List <ResultDefinition>();

            var outerPipeline = new Pipeline <ResultDefinition>();

            outerPipeline.Register(new LengthChecker());

            var rowDefinition = new ResultDefinition
            {
                MaxRecordLength = schema.TotalWidth,
                RowNumber       = rowNumber,
                Record          = record,
            };

            var result = outerPipeline.Execute(rowDefinition);

            if (result != null && result.Any())
            {
                return(result);
            }

            var innerPipeline = new Pipeline <ResultDefinition>();

            innerPipeline.Register(new TypeChecker());
            innerPipeline.Register(new AlignmentChecker());
            innerPipeline.Register(new AllowedValuesChecker());

            WindowCollection windows     = schema.Windows;
            ColumnCollection definitions = schema.ColumnDefinitions;

            string[] values = new string[windows.Count];

            int offset = 0;

            for (int index = 0; index != values.Length; ++index)
            {
                Window            window     = windows[index];
                IColumnDefinition definition = definitions[index];
                string            value      = record.Substring(offset, window.Width);

                values[index] = value;
                offset       += window.Width;
                var dataDefinition = new ResultDefinition
                {
                    RawValue         = value,
                    ColumnDefinition = definition,
                    Window           = window,
                    MaxRecordLength  = schema.TotalWidth,
                    RowNumber        = rowNumber,
                    Record           = record
                };
                var innerResult = innerPipeline.Execute(dataDefinition);
                if (innerResult != null && innerResult.Any())
                {
                    validationResults = validationResults.Concat(innerResult);
                }
            }
            return(validationResults);
        }
Пример #2
0
        private static string getErrorMessage(ISchema schema, IColumnDefinition definition, string value)
        {
            int    position = schema.GetOrdinal(definition.ColumnName);
            string message  = String.Format(null, SharedResources.InvalidColumnConversion, value, definition.ColumnType.FullName, definition.ColumnName, position);

            return(message);
        }
Пример #3
0
        private void BuildAddColumnNode(IColumnDefinition column, IAddTableNode parent)
        {
            IAddColumnNode addColumnNode = new AddColumnNode(parent, column.Name);
            parent.ChildNodes.Add(addColumnNode);

            SemanticModelUtil.Copy(column, addColumnNode);
        }
Пример #4
0
        public void InitFromColonneSource(IColumnDeEasyQuery colonne, CODEQBase objetDeQuery)
        {
            m_colonneSource = colonne;

            CEasyQuery query = objetDeQuery.Query;

            if (query != null)
            {
                //cherche la source
                ITableDefinition  tableDef = null;
                IColumnDefinition colDef   = null;
                IsReadOnly  = true;
                Description = "";
                if (query.FindSource(colonne, objetDeQuery, out tableDef, out colDef))
                {
                    CColumnDefinitionSNMP colSnmp = colDef as CColumnDefinitionSNMP;
                    if (colSnmp != null)
                    {
                        if (tableDef is CTableDefinitionSNMP ||
                            tableDef is CTableDefinitionSnmpOfScalar)
                        {
                            Description = colSnmp.Description;
                            IsReadOnly  = colSnmp.IsReadOnly;
                        }
                    }
                }
            }
        }
Пример #5
0
 public CustomPropertyMapping(IColumnDefinition column, IMemberAccessor member, int fileIndex, int workIndex)
 {
     this.column    = column;
     this.member    = member;
     this.FileIndex = fileIndex;
     this.WorkIndex = workIndex;
 }
Пример #6
0
        public static Tolerance Build(IColumnDefinition columnDefinition)
        {
            if (columnDefinition.Role != ColumnRole.Value)
                throw new ArgumentException("The ColumnDefinition must have have a role defined as 'Value' and is defined as 'Key'", "columnDefinition");

            return Build(columnDefinition.Type, columnDefinition.Tolerance);
        }
Пример #7
0
 public ComplexMapperColumn(IColumnDefinition column, IMapper <TEntity> mapper)
 {
     this.column    = column;
     this.reader    = mapper.GetReader();
     this.writer    = mapper.GetWriter();
     this.workCount = mapper.WorkCount;
 }
Пример #8
0
 /// <summary>
 /// Formats the given values assuming that they are in the same order as the column definitions.
 /// </summary>
 /// <param name="context">The metadata for the record currently being processed.</param>
 /// <param name="values">The values to format.</param>
 /// <returns>The formatted values.</returns>
 protected string[] FormatValuesBase(IRecordContext context, object[] values)
 {
     string[] formattedValues = new string[ColumnDefinitions.Count];
     for (int columnIndex = 0, valueIndex = 0; columnIndex != ColumnDefinitions.Count; ++columnIndex)
     {
         IColumnDefinition definition = ColumnDefinitions[columnIndex];
         if (definition is IMetadataColumn)
         {
             var columnContext  = GetColumnContext(context, columnIndex, valueIndex);
             var formattedValue = Format(columnContext, definition, valueIndex, null);
             formattedValues[columnIndex] = formattedValue;
             ++valueIndex;
         }
         else if (!definition.IsIgnored)
         {
             var    isContextDisabled = context.ExecutionContext.Options.IsColumnContextDisabled;
             var    columnContext     = isContextDisabled ? null : GetColumnContext(context, columnIndex, valueIndex);
             var    value             = values[valueIndex];
             string formattedValue    = Format(columnContext, definition, valueIndex, value);
             formattedValues[columnIndex] = formattedValue;
             ++valueIndex;
         }
     }
     return(formattedValues);
 }
Пример #9
0
 public WriteOnlyPropertyMapping(IColumnDefinition column, string name, int fileIndex, int workIndex)
 {
     this.column    = column;
     this.name      = name;
     this.FileIndex = fileIndex;
     this.WorkIndex = workIndex;
 }
Пример #10
0
 public ComplexMapperColumn(IColumnDefinition column, IMapper <TEntity> mapper)
 {
     this.column  = column;
     reader       = mapper.GetReader();
     writer       = mapper.GetWriter();
     logicalCount = mapper.LogicalCount;
 }
Пример #11
0
        //---------------------------------------
        private DataTable GetTableSnmp(CTableDefinitionSNMP tableSNMP, params string[] strIdsColonnesSource)
        {
            List <uint[]> lstCols = new List <uint[]>();

            if (strIdsColonnesSource != null)
            {
                foreach (string strIdCol in strIdsColonnesSource)
                {
                    try
                    {
                        lstCols.Add(ObjectIdentifier.Convert(strIdCol));
                    }
                    catch { }
                }
            }
            DataTable table = m_interrogateur.GetTable(tableSNMP.OID, lstCols.ToArray());

            if (table != null)
            {
                foreach (DataColumn col in table.Columns)
                {
                    IColumnDefinition colSNMP = tableSNMP.Columns.FirstOrDefault(
                        c => c is CColumnDefinitionSNMP &&
                        ((CColumnDefinitionSNMP)c).OIDString == col.ColumnName);
                    if (colSNMP != null)
                    {
                        col.ColumnName = colSNMP.ColumnName;
                    }
                }
                return(table);
            }
            return(null);
        }
Пример #12
0
 //-----------------------------------------
 public CColumnEQFromSource(IColumnDefinition column)
 {
     m_strIdColonne       = Guid.NewGuid().ToString();
     m_strNomColonne      = column.ColumnName;
     m_strIdColonneSource = column.Id;
     m_typeDonnee         = column.DataType;
 }
Пример #13
0
        private string GetSystemValue(T entity, IColumnDefinition definition, bool isUpdate)
        {
            var name = definition.Name;

            if (name == SystemColumns.Id)
            {
                return(entity.Id.GetSqlSyntax());
            }
            else if (name == SystemColumns.Created)
            {
                return(entity.Created.GetSqlSyntax());
            }
            else if (name == SystemColumns.CreatedBy)
            {
                return(entity.CreatedBy.GetSqlSyntax());
            }
            else if (name == SystemColumns.Modified)
            {
                return(entity.Modified.GetSqlSyntax());
            }
            else if (name == SystemColumns.ModifiedBy)
            {
                return(entity.ModifiedBy.GetSqlSyntax());
            }
            else if (name == SystemColumns.Version)
            {
                if (isUpdate)
                {
                    return(name + " + 1");
                }
                return(entity.Version.GetSqlSyntax());
            }
            return(null);
        }
Пример #14
0
        public static Rounding Build(IColumnDefinition columnDefinition)
        {
            if (columnDefinition.Role != ColumnRole.Value)
            {
                throw new ArgumentException("The ColumnDefinition must have have a role defined as 'Value' and is defined as 'Key'", "columnDefinition");
            }

            Rounding rounding = null;

            switch (columnDefinition.Type)
            {
            case ColumnType.Text:
                break;

            case ColumnType.Numeric:
                rounding = new NumericRounding(double.Parse(columnDefinition.RoundingStep, NumberFormatInfo.InvariantInfo), columnDefinition.RoundingStyle);
                break;

            case ColumnType.DateTime:
                rounding = new DateTimeRounding(TimeSpan.Parse(columnDefinition.RoundingStep, NumberFormatInfo.InvariantInfo), columnDefinition.RoundingStyle);
                break;

            case ColumnType.Boolean:
                break;

            default:
                break;
            }

            return(rounding);
        }
Пример #15
0
 /// <summary>
 /// Formats the given values assuming that they are in the same order as the column definitions.
 /// </summary>
 /// <param name="context">The metadata for the record currently being processed.</param>
 /// <param name="values">The values to format.</param>
 /// <returns>The formatted values.</returns>
 internal string[] FormatValues(IRecoverableRecordContext context, object[] values)
 {
     string[] formattedValues = new string[ColumnDefinitions.Count];
     for (int columnIndex = 0, valueIndex = 0; columnIndex != ColumnDefinitions.Count; ++columnIndex)
     {
         IColumnDefinition definition = ColumnDefinitions[columnIndex];
         if (definition is IMetadataColumn)
         {
             var columnContext  = GetColumnContext(context, columnIndex, valueIndex);
             var formattedValue = FormatWithContext(columnContext, null);
             formattedValues[columnIndex] = formattedValue;
             ++valueIndex;
         }
         else if (!definition.IsIgnored)
         {
             var value          = values[valueIndex];
             var formattedValue = FormatValue(context, columnIndex, valueIndex, value);
             formattedValues[columnIndex] = formattedValue;
             ++valueIndex;
         }
         else
         {
             var formattedValue = FormatValue(context, columnIndex, -1, null);
             formattedValues[columnIndex] = formattedValue;
         }
     }
     return(formattedValues);
 }
Пример #16
0
        public System.Data.DataTable GetData(ITableDefinition tableDefinition)
        {
            DataTable            result    = null;
            CTableDefinitionSNMP tableSNMP = tableDefinition as CTableDefinitionSNMP;

            if (tableSNMP != null)
            {
                result = Messenger.ReadTable(VersionCode.V2,
                                             new IPEndPoint(IPAddress.Parse(m_strIp), m_nPort),
                                             new OctetString(m_strCommunaute),
                                             new ObjectIdentifier(tableSNMP.OID),
                                             1000);
                if (result != null)
                {
                    foreach (DataColumn col in result.Columns)
                    {
                        IColumnDefinition colSNMP = tableDefinition.Columns.FirstOrDefault(
                            c => c is CColumnDefinitionSNMP &&
                            ((CColumnDefinitionSNMP)c).OIDString == col.ColumnName);
                        if (colSNMP != null)
                        {
                            col.ColumnName = colSNMP.ColumnName;
                        }
                    }
                }
            }
            return(result);
        }
Пример #17
0
 internal ColumnProcessingException(ISchema schema, IColumnDefinition definition, string value, Exception innerException)
     : base(getErrorMessage(schema, definition, value), innerException)
 {
     this.Schema           = schema;
     this.ColumnDefinition = definition;
     this.ColumnValue      = value;
 }
Пример #18
0
 /// <summary>
 /// Parses the given values assuming that they are in the same order as the column definitions.
 /// </summary>
 /// <param name="metadata">The current metadata for the process.</param>
 /// <param name="values">The values to parse.</param>
 /// <returns>The parsed objects.</returns>
 protected object[] ParseValuesBase(IProcessMetadata metadata, string[] values)
 {
     object[] parsedValues = new object[definitions.PhysicalCount];
     for (int columnIndex = 0, sourceIndex = 0, destinationIndex = 0; columnIndex != definitions.Count; ++columnIndex)
     {
         IColumnDefinition definition = definitions[columnIndex];
         if (definition is IMetadataColumn metaColumn)
         {
             object value = metaColumn.GetValue(metadata);
             parsedValues[destinationIndex] = value;
             ++destinationIndex;
         }
         else if (!definition.IsIgnored)
         {
             string rawValue = values[sourceIndex];
             ++sourceIndex;
             object parsedValue = parse(definition, rawValue);
             parsedValues[destinationIndex] = parsedValue;
             ++destinationIndex;
         }
         else
         {
             ++sourceIndex;
         }
     }
     return(parsedValues);
 }
        //---------------------------------------------------------------
        private void m_btnOk_Click(object sender, EventArgs e)
        {
            if (m_txtNomTable.Text.Length == 0)
            {
                MessageBox.Show(I.T("Please enter a table name|20004"));
                return;
            }



            m_tableFromDataHotel.NomFinal = m_txtNomTable.Text;
            m_tableFromDataHotel.UseCache = m_chkUseCache.Checked;
            List <IColumnDeEasyQuery> lst = new List <IColumnDeEasyQuery>();

            foreach (ListViewItem item in m_wndListeColonnes.Items)
            {
                if (item.Checked)
                {
                    IColumnDefinition colFromSource = item.Tag as IColumnDefinition;
                    if (colFromSource != null)
                    {
                        IColumnDeEasyQuery newCol = m_tableFromDataHotel.GetColonneFor(colFromSource);
                        if (newCol == null)
                        {
                            newCol = new CColumnEQFromSource(colFromSource);
                        }
                        newCol.ColumnName = item.Text;
                        lst.Add(newCol);
                    }
                    CColonneCalculeeDataHotel colCalc = item.Tag as CColonneCalculeeDataHotel;
                    if (colCalc != null)
                    {
                        colCalc.ColumnName = item.Text;
                        lst.Add(colCalc);
                    }
                }
            }
            m_tableFromDataHotel.SetColonnesOrCalculees(lst);

            List <CColonneEQCalculee> colsCalc = new List <CColonneEQCalculee>();

            foreach (CColonneEQCalculee col in m_ctrlFormulesNommees.GetFormules())
            {
                colsCalc.Add(col);
            }

            m_tableFromDataHotel.ColonnesCalculees = colsCalc;

            CResultAErreur result = m_panelOptions.MajChamps(m_tableFromDataHotel);

            if (!result)
            {
                CFormAlerte.Afficher(result.Erreur);
                return;
            }

            DialogResult = DialogResult.OK;
            Close();
        }
Пример #20
0
 //-------------------------------------------------------
 /// <summary>
 /// Retourne la colonne finale associé à une colonne de la base
 /// </summary>
 /// <param name="colonne"></param>
 /// <returns></returns>
 public IColumnDeEasyQuery GetColonneFor(IColumnDefinition colonne)
 {
     if (colonne != null)
     {
         return(m_listeColonnes.FirstOrDefault(c => c is CColumnEQFromSource && ((CColumnEQFromSource)c).IdColumnSource == colonne.Id));
     }
     return(null);
 }
 public Column(IColumnDefinition columnDefinition)
 {
     ColumnDefinition = columnDefinition;
     if (columnDefinition.Width.IsAbsolute)
     {
         Size = columnDefinition.Width.Value;
     }
 }
 protected override string GetEntityValue(Customer entity, IColumnDefinition definition, bool isUpdate)
 {
     if (definition.Name == "Name")
     {
         return(entity.Name.GetSqlSyntax());
     }
     throw new NotSupportedException();
 }
Пример #23
0
        public static Tolerance Build(IColumnDefinition columnDefinition)
        {
            if (columnDefinition.Role != ColumnRole.Value)
            {
                throw new ArgumentException("The ColumnDefinition must have have a role defined as 'Value' and is defined as 'Key'", "columnDefinition");
            }

            return(Build(columnDefinition.Type, columnDefinition.Tolerance));
        }
Пример #24
0
 public IndexTrackingColumn(
     IColumnDefinition columnDefinition,
     List <int> physicalIndexes,
     List <int> logicalIndexes)
 {
     this.columnDefinition = columnDefinition;
     this.physicalIndexes  = physicalIndexes;
     this.logicalIndexes   = logicalIndexes;
 }
Пример #25
0
 public ConversionColumn(
     IColumnDefinition columnDefinition,
     Func <TSource, TDestination> parser,
     Func <TDestination, TSource> formatter)
     : base(columnDefinition.ColumnName)
 {
     this.columnDefinition = columnDefinition;
     this.parser           = parser;
     this.formatter        = formatter;
 }
Пример #26
0
        private string GetValue(T entity, IColumnDefinition definition, bool isUpdate)
        {
            var value = GetSystemValue(entity, definition, isUpdate);

            if (value == null)
            {
                value = GetEntityValue(entity, definition, isUpdate);
            }
            return(value);
        }
Пример #27
0
 private static string FormatWithoutContext(IColumnDefinition definition, int position, object value)
 {
     try
     {
         return(definition.Format(null, value));
     }
     catch (Exception exception)
     {
         throw new ColumnProcessingException(definition, position, value, exception);
     }
 }
Пример #28
0
 //------------------------------------------------
 public void AddColumn(IColumnDefinition column)
 {
     if (GetColumn(column.Id) == null)
     {
         m_listeColonnes.Add(column);
         if (column.Table != this)
         {
             column.Table = this;
         }
     }
 }
Пример #29
0
 /// <summary>
 /// Adds a column to the schema, using the given definition to define it.
 /// </summary>
 /// <param name="definition">The definition of the column to add.</param>
 /// <param name="window">Describes the column</param>
 /// <returns>The current schema.</returns>
 public FixedLengthSchema AddColumn(IColumnDefinition definition, Window window)
 {
     if (window == null)
     {
         throw new ArgumentNullException("window");
     }
     AddColumnBase(definition);
     windows.Add(window);
     totalWidth += window.Width;
     return this;
 }
Пример #30
0
 /// <summary>
 /// Adds a column to the schema, using the given definition to define it.
 /// </summary>
 /// <param name="definition">The definition of the column to add.</param>
 /// <param name="window">Describes the column</param>
 /// <returns>The current schema.</returns>
 public FixedLengthSchema AddColumn(IColumnDefinition definition, Window window)
 {
     if (window == null)
     {
         throw new ArgumentNullException("window");
     }
     AddColumnBase(definition);
     windows.Add(window);
     totalWidth += window.Width;
     return(this);
 }
Пример #31
0
 private static object ParseWithoutContext(IColumnDefinition definition, int position, string rawValue)
 {
     try
     {
         object parsedValue = definition.Parse(null, rawValue);
         return(parsedValue);
     }
     catch (Exception exception)
     {
         throw new ColumnProcessingException(definition, position, rawValue, exception);
     }
 }
Пример #32
0
 public static PocoColumn FromColumnDefinition(IColumnDefinition columnDefinition)
 {
     return(new PocoColumn
     {
         // Default the column name to the prop/field name if not specified
         ColumnName = columnDefinition.ColumnName ?? columnDefinition.MemberInfo.Name,
         // Default the column type to the prop/field type if not specified
         ColumnType = columnDefinition.ColumnType ?? columnDefinition.MemberInfoType,
         MemberInfo = columnDefinition.MemberInfo,
         MemberInfoType = columnDefinition.MemberInfoType
     });
 }
Пример #33
0
 private object parse(IColumnDefinition definition, string rawValue)
 {
     try
     {
         object parsedValue = definition.Parse(rawValue);
         return(parsedValue);
     }
     catch (Exception exception)
     {
         throw new ColumnProcessingException(this, definition, rawValue, exception);
     }
 }
Пример #34
0
 public static PocoColumn FromColumnDefinition(IColumnDefinition columnDefinition)
 {
     return new PocoColumn
     {
         // Default the column name to the prop/field name if not specified
         ColumnName = columnDefinition.ColumnName ?? columnDefinition.MemberInfo.Name,
         // Default the column type to the prop/field type if not specified
         ColumnType = columnDefinition.ColumnType ?? columnDefinition.MemberInfoType,
         MemberInfo = columnDefinition.MemberInfo,
         MemberInfoType = columnDefinition.MemberInfoType,
         SecondaryIndex = columnDefinition.SecondaryIndex,
         IsCounter = columnDefinition.IsCounter,
         IsStatic = columnDefinition.IsStatic
     };
 }
Пример #35
0
        /// <summary>
        /// Copies all properties from <paramref name="columnDefinition"/> to appropriate <see cref="IAstNodeProperty"/>
        /// objects and adds them to <paramref name="columnNode"/>.
        /// </summary>
        /// <param name="columnDefinition"></param>
        /// <param name="columnNode"></param>
        public static void CopyProperties(IColumnDefinition columnDefinition, IColumnNode columnNode)
        {
            if(columnDefinition.Type != null)
                AddProperty(columnNode, MdlSyntax.Type, columnDefinition.Type.Value.ToString());

            if(columnDefinition.Nullable.HasValue)
                AddProperty(columnNode, MdlSyntax.Nullable, columnDefinition.Nullable.Value.ToString().ToLower());

            if(columnDefinition.Length.HasValue)
                AddProperty(columnNode, MdlSyntax.Length, columnDefinition.Length.Value);

            if(columnDefinition.Precision.HasValue)
                AddProperty(columnNode, MdlSyntax.Precision, columnDefinition.Precision.Value);

            if(columnDefinition.Scale.HasValue)
                AddProperty(columnNode, MdlSyntax.Scale, columnDefinition.Scale.Value);

            if(columnDefinition.PrimaryKey.GetValueOrDefault(false))
                AddProperty(columnNode, MdlSyntax.PrimaryKey, "true");

            if(columnDefinition.Identity.GetValueOrDefault(false))
                AddProperty(columnNode, MdlSyntax.Identity, "true");
        }
Пример #36
0
        public static Rounding Build(IColumnDefinition columnDefinition)
        {
            if (columnDefinition.Role != ColumnRole.Value)
                throw new ArgumentException("The ColumnDefinition must have have a role defined as 'Value' and is defined as 'Key'", "columnDefinition");

            Rounding rounding=null;
            switch (columnDefinition.Type)
            {
                case ColumnType.Text:
                    break;
                case ColumnType.Numeric:
                    rounding = new NumericRounding(double.Parse(columnDefinition.RoundingStep, NumberFormatInfo.InvariantInfo), columnDefinition.RoundingStyle);
                    break;
                case ColumnType.DateTime:
                    rounding = new DateTimeRounding(TimeSpan.Parse(columnDefinition.RoundingStep, NumberFormatInfo.InvariantInfo), columnDefinition.RoundingStyle);
                    break;
                case ColumnType.Boolean:
                    break;
                default:
                    break;
            }

            return rounding;
        }
 protected virtual string GetNullabilitySpecification(IColumnDefinition column)
 {
     return column.Nullable.HasValue ?
         column.Nullable.Value ? 
             "null" : 
             "not null" :
         "";
 }
        protected string MapToNativeType(IColumnDefinition columnDefinition)
        {
            if(!columnDefinition.Type.HasValue)
                throw new DbPlatformException(string.Format("Could not resolve type in {0}", GetFragment(((IAstNode)columnDefinition).Parent)));

            if(!columnDefinition.Length.HasValue && !columnDefinition.Scale.HasValue && !columnDefinition.Precision.HasValue)
                return Platform.TypeMapper.MapToNativeType(columnDefinition.Type.Value, columnDefinition.Length);
            
            return columnDefinition.Length.HasValue ? 
                Platform.TypeMapper.MapToNativeType(columnDefinition.Type.Value, columnDefinition.Length) : 
                Platform.TypeMapper.MapToNativeType(columnDefinition.Type.Value, columnDefinition.Scale, columnDefinition.Precision);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ColumnDefinition"/> class.
 /// </summary>
 /// <param name="columnDefinition"></param>
 public ColumnDefinition(IColumnDefinition columnDefinition) :
     this(columnDefinition.Name, columnDefinition.Table, columnDefinition.Type, columnDefinition.Nullable, columnDefinition.Length, 
         columnDefinition.Scale, columnDefinition.Precision, columnDefinition.PrimaryKey, columnDefinition.Identity)
 {
 }
        private static void BindColumnProperties(IColumnNode columnNode, IColumnDefinition columnDefinition)
        {
            if(columnNode.Properties[MdlSyntax.PrimaryKey] != null)
                columnNode.PrimaryKey = columnDefinition.PrimaryKey = 
                    columnNode.Properties.AsBoolean(MdlSyntax.PrimaryKey);

            if (columnNode.Properties[MdlSyntax.Nullable] != null)
                columnNode.Nullable = columnDefinition.Nullable =
                    columnNode.Properties.AsBoolean(MdlSyntax.Nullable);

            if (columnNode.Properties[MdlSyntax.Length] != null)
                columnNode.Length = columnDefinition.Length =
                    AstNodePropertyUtil.AsInteger(columnNode.Properties, MdlSyntax.Length);
            //
            // Type aliases have already been resolved, so we can freely parse textual type representation.
            if(columnNode.Properties[MdlSyntax.Type] != null)
            {
                string textualType = AstNodePropertyUtil.AsString(columnNode.Properties, MdlSyntax.Type);

                try
                {
                    columnNode.Type = columnDefinition.Type =
                        (DbType)Enum.Parse(typeof(DbType), textualType, true);
                } // try
                catch(ArgumentException e)
                {
                    throw new MdlCompilerException(string.Format(MdlCompilerResources.UnknownType, textualType), e);
                } // catch
            } // if

            if(columnNode.Properties[MdlSyntax.Scale] != null)
                columnNode.Scale = columnDefinition.Scale =
                    AstNodePropertyUtil.AsInteger(columnNode.Properties, MdlSyntax.Scale);

            if(columnNode.Properties[MdlSyntax.Precision] != null)
                columnNode.Precision = columnDefinition.Precision =
                    AstNodePropertyUtil.AsInteger(columnNode.Properties, MdlSyntax.Precision);

            if(columnNode.Properties[MdlSyntax.Identity] != null)
                columnNode.Identity = columnDefinition.Identity =
                    Convert.ToBoolean(AstNodePropertyUtil.AsString(columnNode.Properties, MdlSyntax.Identity));

            if(columnNode.Properties[MdlSyntax.Table] != null)
                columnNode.Table = columnDefinition.Table =
                    AstNodePropertyUtil.AsString(columnNode.Properties, MdlSyntax.Table);
        }
        private void AlterColumn(IColumnDefinition definition, IAlterColumnNode alterColumnNode)
        {
            if(alterColumnNode.Length.HasValue)
                definition.Length = alterColumnNode.Length;

            if(alterColumnNode.Nullable.HasValue)
                definition.Nullable = alterColumnNode.Nullable;
        }
        protected virtual string GetAlterColumnDefinition(IColumnDefinition columnDefinition)
        {
            StringBuilder columnDefinitionBuilder = new StringBuilder();
            columnDefinitionBuilder.Append(Platform.Dialect.EscapeIdentifier(columnDefinition.Name));

            columnDefinitionBuilder.AppendFormat(" {0}", MapToNativeType(columnDefinition));

            if(columnDefinition.Nullable.HasValue)
                columnDefinitionBuilder.AppendFormat(" {0}", columnDefinition.Nullable.Value ? "null" : "not null");

            return columnDefinitionBuilder.ToString();
        }