コード例 #1
0
 public virtual bool CompareColumnDefinitions(Lfx.Data.ColumnDefinition col1, Lfx.Data.ColumnDefinition col2)
 {
     return(col1 == col2);
 }
コード例 #2
0
ファイル: Structure.cs プロジェクト: solutema/ultralight
        /// <summary>
        /// Carga lee la información de la estructura de las tablas de datos desde un documento XML.
        /// </summary>
        /// <param name="xmlDoc">El documento desde el cual cargar la información de la estructura.</param>
        private void AddFromXml(System.Xml.XmlDocument xmlDoc)
        {
            System.Xml.XmlNodeList ClavesXml = xmlDoc.SelectNodes("/Database/Constraint");
            foreach (System.Xml.XmlNode ClaveXml in ClavesXml)
            {
                Lfx.Data.ConstraintDefinition Con = new Lfx.Data.ConstraintDefinition(ClaveXml.Attributes["table"].Value);
                Con.Name            = ClaveXml.Attributes["name"].Value;
                Con.Column          = ClaveXml.Attributes["column"].Value;
                Con.ReferenceTable  = ClaveXml.Attributes["reference_table"].Value;
                Con.ReferenceColumn = ClaveXml.Attributes["reference_column"].Value;
                Constraints.Add(Con.Name, Con);
            }

            System.Xml.XmlNodeList TablasXml = xmlDoc.SelectNodes("/Database/Table");
            foreach (System.Xml.XmlNode TablaXml in TablasXml)
            {
                string TableName = TablaXml.Attributes["name"].Value;
                Lfx.Data.TableStructure Tabla;

                if (m_Tables.ContainsKey(TableName))
                {
                    // Ya existe la tabla, sólo agrego la definición de las columnas nuevas
                    Tabla = m_Tables[TableName];
                }
                else
                {
                    // Es una definición de una tabla nueva
                    Tabla      = new Lfx.Data.TableStructure();
                    Tabla.Name = TableName;
                    if (TablaXml.Attributes["label"] != null)
                    {
                        Tabla.Label = TablaXml.Attributes["label"].Value;
                    }
                    Tabla.Columns = new System.Collections.Generic.Dictionary <string, Lfx.Data.ColumnDefinition>();
                }

                System.Xml.XmlNodeList ColumnasXml = TablaXml.SelectNodes("Column");
                foreach (System.Xml.XmlNode ColumnaXml in ColumnasXml)
                {
                    Lfx.Data.ColumnDefinition Columna = new Lfx.Data.ColumnDefinition();
                    Columna.Name = ColumnaXml.Attributes["name"].Value;

                    if (ColumnaXml.Attributes["inputtype"] != null)
                    {
                        switch (ColumnaXml.Attributes["inputtype"].Value)
                        {
                        case "AlphanumericSet":
                            Columna.InputFieldType = InputFieldTypes.AlphanumericSet;
                            Columna.FieldType      = DbTypes.VarChar;
                            break;

                        case "Binary":
                            Columna.InputFieldType = InputFieldTypes.Binary;
                            Columna.FieldType      = DbTypes.Blob;
                            break;

                        case "Bool":
                            Columna.InputFieldType = InputFieldTypes.Bool;
                            Columna.FieldType      = DbTypes.TinyInt;
                            break;

                        case "Currency":
                            Columna.InputFieldType = InputFieldTypes.Currency;
                            Columna.FieldType      = DbTypes.Currency;
                            Columna.Lenght         = 15;
                            Columna.Precision      = 4;
                            break;

                        case "Date":
                            Columna.InputFieldType = InputFieldTypes.Date;
                            Columna.FieldType      = DbTypes.DateTime;
                            break;

                        case "DateTime":
                            Columna.InputFieldType = InputFieldTypes.DateTime;
                            Columna.FieldType      = DbTypes.DateTime;
                            break;

                        case "Image":
                            Columna.InputFieldType = InputFieldTypes.Image;
                            Columna.FieldType      = DbTypes.Blob;
                            break;

                        case "Integer":
                            Columna.InputFieldType = InputFieldTypes.Integer;
                            Columna.FieldType      = DbTypes.Integer;
                            break;

                        case "MediumInt":
                            Columna.InputFieldType = InputFieldTypes.Integer;
                            Columna.FieldType      = DbTypes.MediumInt;
                            break;

                        case "SmallInt":
                            Columna.InputFieldType = InputFieldTypes.Integer;
                            Columna.FieldType      = DbTypes.SmallInt;
                            break;

                        case "TinyInt":
                            Columna.InputFieldType = InputFieldTypes.Integer;
                            Columna.FieldType      = DbTypes.TinyInt;
                            break;

                        case "Memo":
                            Columna.InputFieldType = InputFieldTypes.Memo;
                            Columna.FieldType      = DbTypes.Text;
                            break;

                        case "Numeric":
                            Columna.InputFieldType = InputFieldTypes.Numeric;
                            Columna.FieldType      = DbTypes.Numeric;
                            Columna.Lenght         = 15;
                            Columna.Precision      = 4;
                            break;

                        case "NumericSet":
                            Columna.InputFieldType = InputFieldTypes.NumericSet;
                            Columna.FieldType      = DbTypes.SmallInt;
                            break;

                        case "Relation":
                            Columna.InputFieldType = InputFieldTypes.Relation;
                            if (ColumnaXml.Attributes["relation_table"] != null)
                            {
                                Columna.Relation = new Relation(Columna.Name, ColumnaXml.Attributes["relation_table"].Value, ColumnaXml.Attributes["relation_key"].Value, ColumnaXml.Attributes["relation_detail"].Value);
                            }
                            Columna.FieldType = DbTypes.Integer;
                            break;

                        case "Serial":
                            Columna.InputFieldType = InputFieldTypes.Serial;
                            Columna.FieldType      = DbTypes.Serial;
                            break;

                        case "Text":
                            Columna.InputFieldType = InputFieldTypes.Text;
                            Columna.FieldType      = DbTypes.VarChar;
                            break;

                        default:
                            throw new NotImplementedException("Lfx.Data.DataBaseCache.CargarEstructuraDesdeXml: Falta implementar " + ColumnaXml.Attributes["inputtype"].Value);
                        }
                    }
                    else
                    {
                        Columna.FieldType = Lfx.Data.Types.FromSqlType(ColumnaXml.Attributes["datatype"].Value);
                    }

                    if (ColumnaXml.Attributes["lenght"] != null)
                    {
                        Columna.Lenght = Lfx.Types.Parsing.ParseInt(ColumnaXml.Attributes["lenght"].Value);
                    }
                    else if (Columna.FieldType == DbTypes.VarChar)
                    {
                        // La longitud predeterminada para los campos VarChar es de 200
                        Columna.Lenght = 200;
                    }

                    if (ColumnaXml.Attributes["precision"] != null)
                    {
                        Columna.Precision = Lfx.Types.Parsing.ParseInt(ColumnaXml.Attributes["precision"].Value);
                    }

                    if (ColumnaXml.Attributes["label"] != null)
                    {
                        Columna.Label = ColumnaXml.Attributes["label"].Value;
                    }
                    else
                    {
                        Columna.Label = Columna.Name;
                    }

                    if (ColumnaXml.Attributes["section"] != null)
                    {
                        Columna.Section = ColumnaXml.Attributes["section"].Value;
                    }

                    if (ColumnaXml.Attributes["required"] != null && ColumnaXml.Attributes["required"].Value == "!")
                    {
                        Columna.Required = true;
                    }
                    else
                    {
                        Columna.Required = false;
                    }

                    if (ColumnaXml.Attributes["nullable"] == null)
                    {
                        Columna.Nullable = false;
                    }
                    else if (ColumnaXml.Attributes["nullable"].Value == "1")
                    {
                        Columna.Nullable = true;
                    }
                    else
                    {
                        Columna.Nullable = false;
                    }

                    if (ColumnaXml.Attributes["primary_key"] != null)
                    {
                        Columna.PrimaryKey = System.Convert.ToBoolean(Lfx.Types.Parsing.ParseInt(ColumnaXml.Attributes["primary_key"].Value));
                    }

                    if (ColumnaXml.Attributes["default"] != null && ColumnaXml.Attributes["default"].Value.Length > 0)
                    {
                        Columna.DefaultValue = ColumnaXml.Attributes["default"].Value;
                    }
                    else
                    {
                        switch (Columna.FieldType)
                        {
                        case DbTypes.VarChar:
                            Columna.DefaultValue = null;
                            break;

                        case DbTypes.Text:
                        case DbTypes.Blob:
                            Columna.DefaultValue = null;
                            break;

                        case DbTypes.Currency:
                        case DbTypes.Integer:
                        case DbTypes.NonExactDecimal:
                        case DbTypes.Numeric:
                        case DbTypes.Serial:
                        case DbTypes.SmallInt:
                        case DbTypes.TinyInt:
                        case DbTypes.MediumInt:
                            if (Columna.Nullable)
                            {
                                Columna.DefaultValue = "NULL";
                            }
                            else
                            {
                                Columna.DefaultValue = null;
                            }
                            break;

                        case DbTypes.DateTime:
                            Columna.DefaultValue = null;
                            break;

                        default:
                            Columna.DefaultValue = "";
                            break;
                        }
                    }

                    if (Tabla.Columns.ContainsKey(Columna.Name))
                    {
                        Tabla.Columns[Columna.Name] = Columna;
                    }
                    else
                    {
                        Tabla.Columns.Add(Columna.Name, Columna);
                    }
                }

                //Agrego los campos de sys_tags
                if (this.TagList.ContainsKey(Tabla.Name))
                {
                    foreach (Data.Tag Tg in this.TagList[Tabla.Name])
                    {
                        Lfx.Data.ColumnDefinition Columna = new Lfx.Data.ColumnDefinition(Tg.FieldName, Tg.FieldType);
                        switch (Columna.FieldType)
                        {
                        case Lfx.Data.DbTypes.VarChar:
                            Columna.Lenght = 200;
                            break;

                        case Lfx.Data.DbTypes.Numeric:
                            Columna.Lenght    = 15;
                            Columna.Precision = 4;
                            break;
                        }
                        Columna.Nullable   = Tg.Nullable;
                        Columna.PrimaryKey = false;
                        Columna.Label      = Tg.Label;

                        if (Tg.DefaultValue != null)
                        {
                            Columna.DefaultValue = Tg.DefaultValue.ToString();
                        }

                        if (Tabla.Columns.ContainsKey(Tg.FieldName))
                        {
                            Tabla.Columns[Columna.Name] = Columna;
                        }
                        else
                        {
                            Tabla.Columns.Add(Columna.Name, Columna);
                        }
                    }
                }

                if (Tabla.Indexes == null)
                {
                    Tabla.Indexes = new System.Collections.Generic.Dictionary <string, Lfx.Data.IndexDefinition>();
                }

                System.Xml.XmlNodeList IndicesXml = TablaXml.SelectNodes("Index");
                foreach (System.Xml.XmlNode IndiceXml in IndicesXml)
                {
                    Lfx.Data.IndexDefinition Indice = new Lfx.Data.IndexDefinition(Tabla.Name);
                    Indice.Name = IndiceXml.Attributes["name"].Value;
                    if (IndiceXml.Attributes["unique"] != null)
                    {
                        Indice.Unique = System.Convert.ToBoolean(Lfx.Types.Parsing.ParseInt(IndiceXml.Attributes["unique"].Value));
                    }
                    if (IndiceXml.Attributes["primary"] != null)
                    {
                        Indice.Primary = System.Convert.ToBoolean(Lfx.Types.Parsing.ParseInt(IndiceXml.Attributes["primary"].Value));
                    }
                    Indice.Columns = new List <string>(IndiceXml.Attributes["columns"].Value.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries));
                    Tabla.Indexes.Add(Indice.Name, Indice);

                    if (Indice.Primary)
                    {
                        // Marco las claves primarias
                        foreach (string ColName in Indice.Columns)
                        {
                            Tabla.Columns[ColName].PrimaryKey = true;
                        }
                    }
                }

                if (m_Tables.ContainsKey(Tabla.Name) == false)
                {
                    this.m_Tables.Add(Tabla.Name, Tabla);
                }
            }
        }
コード例 #3
0
ファイル: Structure.cs プロジェクト: solutema/ultralight
                /// <summary>
                /// Carga lee la información de la estructura de las tablas de datos desde un documento XML.
                /// </summary>
                /// <param name="xmlDoc">El documento desde el cual cargar la información de la estructura.</param>
                private void AddFromXml(System.Xml.XmlDocument xmlDoc)
                {
                        System.Xml.XmlNodeList ClavesXml = xmlDoc.SelectNodes("/Database/Constraint");
                        foreach (System.Xml.XmlNode ClaveXml in ClavesXml) {
                                Lfx.Data.ConstraintDefinition Con = new Lfx.Data.ConstraintDefinition(ClaveXml.Attributes["table"].Value);
                                Con.Name = ClaveXml.Attributes["name"].Value;
                                Con.Column = ClaveXml.Attributes["column"].Value;
                                Con.ReferenceTable = ClaveXml.Attributes["reference_table"].Value;
                                Con.ReferenceColumn = ClaveXml.Attributes["reference_column"].Value;
                                Constraints.Add(Con.Name, Con);
                        }

                        System.Xml.XmlNodeList TablasXml = xmlDoc.SelectNodes("/Database/Table");
                        foreach (System.Xml.XmlNode TablaXml in TablasXml) {
                                string TableName = TablaXml.Attributes["name"].Value;
                                Lfx.Data.TableStructure Tabla;
                                
                                if (m_Tables.ContainsKey(TableName)) {
                                        // Ya existe la tabla, sólo agrego la definición de las columnas nuevas
                                        Tabla = m_Tables[TableName];
                                } else {
                                        // Es una definición de una tabla nueva
                                        Tabla = new Lfx.Data.TableStructure();
                                        Tabla.Name = TableName;
                                        if (TablaXml.Attributes["label"] != null)
                                                Tabla.Label = TablaXml.Attributes["label"].Value;
                                        Tabla.Columns = new System.Collections.Generic.Dictionary<string, Lfx.Data.ColumnDefinition>();
                                }

                                System.Xml.XmlNodeList ColumnasXml = TablaXml.SelectNodes("Column");
                                foreach (System.Xml.XmlNode ColumnaXml in ColumnasXml) {
                                        Lfx.Data.ColumnDefinition Columna = new Lfx.Data.ColumnDefinition();
                                        Columna.Name = ColumnaXml.Attributes["name"].Value;

                                        if (ColumnaXml.Attributes["inputtype"] != null) {
                                                switch (ColumnaXml.Attributes["inputtype"].Value) {
                                                        case "AlphanumericSet":
                                                                Columna.InputFieldType = InputFieldTypes.AlphanumericSet;
                                                                Columna.FieldType = DbTypes.VarChar;
                                                                break;
                                                        case "Binary":
                                                                Columna.InputFieldType = InputFieldTypes.Binary;
                                                                Columna.FieldType = DbTypes.Blob;
                                                                break;
                                                        case "Bool":
                                                                Columna.InputFieldType = InputFieldTypes.Bool;
                                                                Columna.FieldType = DbTypes.TinyInt;
                                                                break;
                                                        case "Currency":
                                                                Columna.InputFieldType = InputFieldTypes.Currency;
                                                                Columna.FieldType = DbTypes.Currency;
                                                                Columna.Lenght = 15;
                                                                Columna.Precision = 4;
                                                                break;
                                                        case "Date":
                                                                Columna.InputFieldType = InputFieldTypes.Date;
                                                                Columna.FieldType = DbTypes.DateTime;
                                                                break;
                                                        case "DateTime":
                                                                Columna.InputFieldType = InputFieldTypes.DateTime;
                                                                Columna.FieldType = DbTypes.DateTime;
                                                                break;
                                                        case "Image":
                                                                Columna.InputFieldType = InputFieldTypes.Image;
                                                                Columna.FieldType = DbTypes.Blob;
                                                                break;
                                                        case "Integer":
                                                                Columna.InputFieldType = InputFieldTypes.Integer;
                                                                Columna.FieldType = DbTypes.Integer;
                                                                break;
                                                        case "MediumInt":
                                                                Columna.InputFieldType = InputFieldTypes.Integer;
                                                                Columna.FieldType = DbTypes.MediumInt;
                                                                break;
                                                        case "SmallInt":
                                                                Columna.InputFieldType = InputFieldTypes.Integer;
                                                                Columna.FieldType = DbTypes.SmallInt;
                                                                break;
                                                        case "TinyInt":
                                                                Columna.InputFieldType = InputFieldTypes.Integer;
                                                                Columna.FieldType = DbTypes.TinyInt;
                                                                break;
                                                        case "Memo":
                                                                Columna.InputFieldType = InputFieldTypes.Memo;
                                                                Columna.FieldType = DbTypes.Text;
                                                                break;
                                                        case "Numeric":
                                                                Columna.InputFieldType = InputFieldTypes.Numeric;
                                                                Columna.FieldType = DbTypes.Numeric;
                                                                Columna.Lenght = 15;
                                                                Columna.Precision = 4;
                                                                break;
                                                        case "NumericSet":
                                                                Columna.InputFieldType = InputFieldTypes.NumericSet;
                                                                Columna.FieldType = DbTypes.SmallInt;
                                                                break;
                                                        case "Relation":
                                                                Columna.InputFieldType = InputFieldTypes.Relation;
                                                                if (ColumnaXml.Attributes["relation_table"] != null)
                                                                        Columna.Relation = new Relation(Columna.Name, ColumnaXml.Attributes["relation_table"].Value, ColumnaXml.Attributes["relation_key"].Value, ColumnaXml.Attributes["relation_detail"].Value);
                                                                Columna.FieldType = DbTypes.Integer;
                                                                break;
                                                        case "Serial":
                                                                Columna.InputFieldType = InputFieldTypes.Serial;
                                                                Columna.FieldType = DbTypes.Serial;
                                                                break;
                                                        case "Text":
                                                                Columna.InputFieldType = InputFieldTypes.Text;
                                                                Columna.FieldType = DbTypes.VarChar;
                                                                break;
                                                        default:
                                                                throw new NotImplementedException("Lfx.Data.DataBaseCache.CargarEstructuraDesdeXml: Falta implementar " + ColumnaXml.Attributes["inputtype"].Value);
                                                }
                                        } else {
                                                Columna.FieldType = Lfx.Data.Types.FromSqlType(ColumnaXml.Attributes["datatype"].Value);
                                        }

                                        if (ColumnaXml.Attributes["lenght"] != null)
                                                Columna.Lenght = Lfx.Types.Parsing.ParseInt(ColumnaXml.Attributes["lenght"].Value);
                                        else if (Columna.FieldType == DbTypes.VarChar)
                                                // La longitud predeterminada para los campos VarChar es de 200
                                                Columna.Lenght = 200;

                                        if (ColumnaXml.Attributes["precision"] != null)
                                                Columna.Precision = Lfx.Types.Parsing.ParseInt(ColumnaXml.Attributes["precision"].Value);

                                        if (ColumnaXml.Attributes["label"] != null)
                                                Columna.Label = ColumnaXml.Attributes["label"].Value;
                                        else
                                                Columna.Label = Columna.Name;

                                        if (ColumnaXml.Attributes["section"] != null)
                                                Columna.Section = ColumnaXml.Attributes["section"].Value;

                                        if (ColumnaXml.Attributes["required"] != null && ColumnaXml.Attributes["required"].Value == "!")
                                                Columna.Required = true;
                                        else
                                                Columna.Required = false;

                                        if (ColumnaXml.Attributes["nullable"] == null)
                                                Columna.Nullable = false;
                                        else if (ColumnaXml.Attributes["nullable"].Value == "1")
                                                Columna.Nullable = true;
                                        else
                                                Columna.Nullable = false;

                                        if (ColumnaXml.Attributes["primary_key"] != null)
                                                Columna.PrimaryKey = System.Convert.ToBoolean(Lfx.Types.Parsing.ParseInt(ColumnaXml.Attributes["primary_key"].Value));

                                        if (ColumnaXml.Attributes["default"] != null && ColumnaXml.Attributes["default"].Value.Length > 0) {
                                                Columna.DefaultValue = ColumnaXml.Attributes["default"].Value;
                                        } else {
                                                switch (Columna.FieldType) {
                                                        case DbTypes.VarChar:
                                                                Columna.DefaultValue = null;
                                                                break;
                                                        case DbTypes.Text:
                                                        case DbTypes.Blob:
                                                                Columna.DefaultValue = null;
                                                                break;
                                                        case DbTypes.Currency:
                                                        case DbTypes.Integer:
                                                        case DbTypes.NonExactDecimal:
                                                        case DbTypes.Numeric:
                                                        case DbTypes.Serial:
                                                        case DbTypes.SmallInt:
                                                        case DbTypes.TinyInt:
                                                        case DbTypes.MediumInt:
                                                                if (Columna.Nullable)
                                                                        Columna.DefaultValue = "NULL";
                                                                else
                                                                        Columna.DefaultValue = null;
                                                                break;
                                                        case DbTypes.DateTime:
                                                                Columna.DefaultValue = null;
                                                                break;
                                                        default:
                                                                Columna.DefaultValue = "";
                                                                break;
                                                }
                                        }

                                        if (Tabla.Columns.ContainsKey(Columna.Name))
                                                Tabla.Columns[Columna.Name] = Columna;
                                        else
                                                Tabla.Columns.Add(Columna.Name, Columna);
                                }

                                //Agrego los campos de sys_tags
                                if (this.TagList.ContainsKey(Tabla.Name)) {
                                        foreach (Data.Tag Tg in this.TagList[Tabla.Name]) {
                                                Lfx.Data.ColumnDefinition Columna = new Lfx.Data.ColumnDefinition(Tg.FieldName, Tg.FieldType);
                                                switch (Columna.FieldType) {
                                                        case Lfx.Data.DbTypes.VarChar:
                                                                Columna.Lenght = 200;
                                                                break;
                                                        case Lfx.Data.DbTypes.Numeric:
                                                                Columna.Lenght = 15;
                                                                Columna.Precision = 4;
                                                                break;
                                                }
                                                Columna.Nullable = Tg.Nullable;
                                                Columna.PrimaryKey = false;
                                                Columna.Label = Tg.Label;

                                                if (Tg.DefaultValue != null)
                                                        Columna.DefaultValue = Tg.DefaultValue.ToString();

                                                if (Tabla.Columns.ContainsKey(Tg.FieldName))
                                                        Tabla.Columns[Columna.Name] = Columna;
                                                else
                                                        Tabla.Columns.Add(Columna.Name, Columna);
                                        }
                                }

                                if (Tabla.Indexes == null)
                                        Tabla.Indexes = new System.Collections.Generic.Dictionary<string, Lfx.Data.IndexDefinition>();

                                System.Xml.XmlNodeList IndicesXml = TablaXml.SelectNodes("Index");
                                foreach (System.Xml.XmlNode IndiceXml in IndicesXml) {
                                        Lfx.Data.IndexDefinition Indice = new Lfx.Data.IndexDefinition(Tabla.Name);
                                        Indice.Name = IndiceXml.Attributes["name"].Value;
                                        if (IndiceXml.Attributes["unique"] != null)
                                                Indice.Unique = System.Convert.ToBoolean(Lfx.Types.Parsing.ParseInt(IndiceXml.Attributes["unique"].Value));
                                        if (IndiceXml.Attributes["primary"] != null)
                                                Indice.Primary = System.Convert.ToBoolean(Lfx.Types.Parsing.ParseInt(IndiceXml.Attributes["primary"].Value));
                                        Indice.Columns = new List<string>(IndiceXml.Attributes["columns"].Value.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries));
                                        Tabla.Indexes.Add(Indice.Name, Indice);

                                        if (Indice.Primary) {
                                                // Marco las claves primarias
                                                foreach (string ColName in Indice.Columns) {
                                                        Tabla.Columns[ColName].PrimaryKey = true;
                                                }
                                        }
                                }

                                if (m_Tables.ContainsKey(Tabla.Name) == false)
                                        this.m_Tables.Add(Tabla.Name, Tabla);
                        }
                }