Example #1
0
            void ElementEntityProperties(XmlReader reader, MapConfig config, EntityMap entMap)
            {
                bool hasReachedEndGracefully = false;

                while (reader.Read())
                {
                    if (reader.CanReadElement("property"))
                    {
                        var prop = Read_PropertyElement(reader, config, "property");
                        if (prop != null)
                        {
                            entMap.Add(prop);
                        }
                    }
                    else if (reader.CanReadElement("reference"))
                    {
                        var prop = Read_PropertyElement(reader, config, "reference", true) as Relation;
                        if (prop != null)
                        {
                            entMap.Add(prop);
                        }
                    }
                    else if (reader.CanReadElement("list"))
                    {
                        var prop = Read_List(reader, config, CollectionType.List);
                        if (prop != null)
                        {
                            entMap.Add(prop);
                        }
                    }
                    else if (reader.CanReadElement("map"))
                    {
                        var prop = Read_List(reader, config, CollectionType.Map);
                        if (prop != null)
                        {
                            entMap.Add(prop);
                        }
                    }
                    else if (reader.CanReadElement("set"))
                    {
                        var prop = Read_List(reader, config, CollectionType.Set);
                        if (prop != null)
                        {
                            entMap.Add(prop);
                        }
                    }
                    else if (reader.HasReachedEndOfElement("properties"))
                    {
                        hasReachedEndGracefully = true;
                        break;
                    }
                }

                if (!hasReachedEndGracefully)
                {
                    throw new MappingSerializationException(typeof(PropertyCollection), "missing a </properties> end tag");
                }
            }
Example #2
0
            //void InitializeRelObject(ref Relation rel, Property prop)
            //{
            //    if (rel == null)
            //        rel = new Relation(prop);
            //}

            #region <statement>

            StatementMap Read_StatementElement(XmlReader reader, MapConfig config, string elementName)
            {
                if (reader.CanReadElement(elementName))
                {
                    StatementMap statement = new StatementMap();

                    while (reader.MoveToNextAttribute())
                    {
                        string currentAttribute = reader.Name;
                        switch (currentAttribute)
                        {
                        case "name":
                            statement.Name = reader.Value;
                            break;

                        case "dbName":
                            statement.DbName = reader.Value;
                            break;

                        case "canRunOn":
                            statement.CanRunOn = reader.Value;
                            break;

                        case "resultMap":
                            statement.ResultMap = reader.Value;
                            break;

                        case "resultIsCollection":
                            statement.ResultIsCollection = ReadBool(reader.Value);
                            break;

                        case "inputParamType":
                            statement.InputParametersMap.Add("a", reader.Value);
                            break;

                        case "parse":
                            statement.IsParsingRequired = ReadBool(reader.Value);
                            break;

                        case "operationType":
                            statement.OperationType = ReadEnumType <MappedStatementType>(reader.Value);
                            break;

                        default:
                            break;
                        }
                    }

                    if ((statement.OperationType == MappedStatementType.Undefined) && !elementName.ToUpper().Equals("STATEMENT"))
                    {
                        statement.OperationType = ReadEnumType <MappedStatementType>(elementName);
                    }

                    return(statement);
                }
                else
                {
                    return(null);
                }
            }
Example #3
0
 void Read_ComplexTypesElement(XmlReader reader, MapConfig config)
 {
     while (reader.Read())
     {
         if (reader.CanReadElement("type"))
         {
             var cp = this.Read_ComplexTypeElement(reader, config);
             if (cp != null)
             {
                 config.ComplexTypes.Add(cp);
             }
         }
         else if (reader.HasReachedEndOfElement("complexTypes"))
         {
             return;
         }
     }
     throw new MappingSerializationException(typeof(ComplexTypeCollection), "missing a </complexTypes> end tag");
 }
Example #4
0
 void Read_EntitiesElements(XmlReader reader, MapConfig config)
 {
     while (reader.Read())
     {
         if (reader.CanReadElement("entity"))
         {
             var ent = Read_EntityElement(reader, config);
             if (ent != null)
             {
                 ent.Parent = config;
                 config.EntityConfigs.Add(ent);
             }
         }
         else if (reader.HasReachedEndOfElement("entities"))
         {
             return;
         }
     }
     throw new MappingSerializationException(typeof(EntityCollection), "missing a </entities> end tag");
 }
Example #5
0
            void Read_Project_PropertiesElement(XmlReader reader, MapConfig config)
            {
                //bool hasReachedEndGracefully = false;
                while (reader.Read())
                {
                    if (reader.CanReadElement("property"))
                    {
                        string propName  = null;
                        string propValue = null;
                        while (reader.MoveToNextAttribute())
                        {
                            var currAttribute = reader.Name;

                            switch (currAttribute)
                            {
                            case "name":
                                propName = reader.Value;
                                break;

                            case "value":
                                propValue = reader.Value;
                                break;

                            default:
                                break;
                            }
                        }

                        if (!string.IsNullOrWhiteSpace(propName))
                        {
                            config.Settings.SetPropety(propName, propValue);
                        }
                    }
                    else if (reader.HasReachedEndOfElement("project.properties"))
                    {
                        return;
                    }
                }
            }
Example #6
0
            void ElementEntityPrimaryKey(XmlReader reader, MapConfig config, EntityMap entMap)
            {
                bool hasReachedEndGracefully   = false;
                List <PrimaryKeyProperty> keys = new List <PrimaryKeyProperty>();

                while (reader.Read())
                {
                    if (reader.CanReadElement("key"))
                    {
                        PrimaryKeyProperty pk = new PrimaryKeyProperty();
                        var prop = Read_PropertyElement(reader, config, "key", pk);
                        if (prop != null)
                        {
                            pk.Key = prop;
                            IKeyGenerator idGenerator;
                            if (!string.IsNullOrWhiteSpace(pk.KeyGenerationStrategy) && config.PrimaryKeyGeneratorStore.TryGetValue(pk.KeyGenerationStrategy, out idGenerator))
                            {
                                pk.KeyGenerator = idGenerator;
                            }
                            keys.Add(pk);
                        }
                    }
                    else if (reader.HasReachedEndOfElement("primaryKey"))
                    {
                        hasReachedEndGracefully = true;
                        break;
                    }
                }

                if (!hasReachedEndGracefully)
                {
                    throw new MappingSerializationException(typeof(PrimaryKey), "missing a </primaryKey> end tag");
                }

                entMap.AddKeyRange(keys);
            }
Example #7
0
            ComplexType Read_ComplexTypeElement(XmlReader reader, MapConfig config)
            {
                ComplexType compType = new ComplexType(null);

                if (reader.CanReadElement("type"))
                {
                    while (reader.MoveToNextAttribute())
                    {
                        switch (reader.Name)
                        {
                        case "fullname":
                            compType.FullName = reader.Value;
                            break;

                        case "enum":
                            compType.IsEnum = ReadBool(reader.Value);
                            break;

                        default:
                            break;
                        }
                    }

                    while (reader.Read())
                    {
                        if (reader.HasReachedEndOfElement("type"))
                        {
                            return(compType);
                        }

                        else if (reader.CanReadElement("properties"))
                        {
                            bool hasReachedEndGracefully = false;
                            while (reader.Read())
                            {
                                if (reader.CanReadElement("property"))
                                {
                                    var prop = Read_PropertyElement(reader, config, "property");
                                    if (prop != null)
                                    {
                                        compType.Properties.Add(prop);
                                    }
                                }
                                else if (reader.HasReachedEndOfElement("properties"))
                                {
                                    hasReachedEndGracefully = true;
                                    break;
                                }
                            }

                            if (!hasReachedEndGracefully)
                            {
                                throw new MappingSerializationException(typeof(PropertyCollection), "missing a </properties> end tag");
                            }
                        }
                    }

                    throw new MappingSerializationException(typeof(ComplexType), "missing a </type> end tag");
                }
                return(null);
            }
Example #8
0
            EntityMap Read_EntityElement(XmlReader reader, MapConfig config)
            {
                EntityMap entMap = new EntityMap();

                if (reader.CanReadElement("entity"))
                {
                    while (reader.MoveToNextAttribute())
                    {
                        string currentAttribute = reader.Name;
                        switch (currentAttribute)
                        {
                        case "name":
                            entMap.Name = reader.Value;
                            break;

                        case "extends":
                            entMap.Extends = reader.Value;
                            break;

                        case "assembly":
                            entMap.AssemblyName = reader.Value;
                            break;

                        case "entityNamespace":
                            entMap.Namespace = reader.Value;
                            break;

                        case "table":
                            entMap.TableName = reader.Value;
                            break;

                        case "schema":
                            entMap.SchemaName = reader.Value;
                            break;

                        case "alias":
                            entMap.TableAlias = reader.Value;
                            break;

                        case "order":
                            entMap.Order = ReadInteger(reader.Value);
                            break;

                        case "sort":
                            entMap.SortOrder = ReadInteger(reader.Value);
                            break;

                        case "trackable":
                            entMap.IsTrackable = ReadBool(reader.Value);
                            break;

                        case "linkTable":
                            bool isLinkTable;
                            if (bool.TryParse(reader.Value, out isLinkTable))
                            {
                                entMap.IsLinkTable = isLinkTable;
                            }
                            break;

                        default:
                            if (includeMetaData)
                            {
                                if (!string.IsNullOrWhiteSpace(currentAttribute) && currentAttribute.StartsWith("data_"))
                                {
                                    string metaKey = currentAttribute.Replace("data_", string.Empty);
                                    if (!entMap.MetaDataAttributes.ContainsKey(metaKey))
                                    {
                                        entMap.MetaDataAttributes.Add(metaKey, reader.Value);
                                    }
                                }
                            }
                            break;
                        }
                    }

                    while (reader.Read())
                    {
                        if (reader.HasReachedEndOfElement("entity"))
                        {
                            return(entMap);
                        }

                        //element primary key
                        else if (reader.CanReadElement("primaryKey"))
                        {
                            ElementEntityPrimaryKey(reader, config, entMap);
                        }

                        //element properties
                        else if (reader.CanReadElement("properties"))
                        {
                            ElementEntityProperties(reader, config, entMap);
                        }

                        //element relations
                        else if (reader.CanReadElement("relations"))
                        {
                            ElementEntityReadRelations(reader, config, entMap);
                        }

                        else if (reader.CanReadElement("statements"))
                        {
                            Read_StatementsElement(reader, config, entMap);
                        }
                    }

                    throw new MappingSerializationException(typeof(EntityMap), "missing a </entity> end tag");
                }
                return(null);
            }
Example #9
0
            Property Read_PropertyElement(XmlReader reader, MapConfig config, string elementName, PrimaryKeyProperty pk, bool forceReturnRel = false)
            {
                if (reader.CanReadElement(elementName))
                {
                    var    property     = new Property();
                    var    rel          = new Relation();
                    bool   loadedRel    = false;
                    string keyGen       = null;
                    string unsavedValue = null;

                    while (reader.MoveToNextAttribute())
                    {
                        string currentAttribute = reader.Name;
                        switch (currentAttribute)
                        {
                        case "name":
                            property.PropertyName = reader.Value;
                            break;

                        case "column":
                            property.ColumnName = reader.Value;
                            break;

                        case "constraintType":
                            property.ConstraintType = ReadEnumType <ConstraintType>(reader.Value);
                            break;

                        case "clrType":
                            //property.ClrType = ReadClrType(reader.Value);
                            break;

                        case "dbType":
                            property.DbType = ReadEnumType <System.Data.DbType>(reader.Value);
                            break;

                        case "sqlType":
                            property.SqlType = reader.Value;
                            break;

                        case "length":
                            property.Length = ReadInteger(reader.Value);
                            break;

                        case "precision":
                            property.Precision = ReadInteger(reader.Value);
                            break;

                        case "scale":
                            property.Scale = ReadInteger(reader.Value);
                            break;

                        case "type":
                            property.ComplexTypeName = reader.Value;
                            property.IsComplexType   = true;
                            break;

                        case "lazy":
                            property.LazyLoad = ReadBool(reader.Value);
                            break;

                        case "unique":
                            property.IsUnique = ReadBool(reader.Value);
                            break;

                        case "primaryKey":
                            property.IsPrimaryKey = ReadBool(reader.Value);
                            break;

                        case "default":
                            property.DefaultValue = reader.Value;
                            break;

                        case "constraint":
                            property.ConstraintName = reader.Value;
                            break;

                        case "ignoreOnUpdate":
                            property.IgnoreOnUpdate = ReadBool(reader.Value);
                            break;

                        case "nullable":
                            property.IsNullable = ReadBool(reader.Value);
                            break;

                        case "identity":
                            property.IsIdentity = ReadBool(reader.Value);
                            break;

                        case "autoGenerated":
                            property.IsAutoGenerated = ReadBool(reader.Value);
                            break;

                        case "order":
                            property.Order = ReadInteger(reader.Value);
                            break;

                        //relation attributes
                        case "relation":
                            loadedRel        = true;
                            rel.RelationType = ReadEnumType <RelationshipType>(reader.Value);
                            break;

                        case "referenceTable":
                            loadedRel          = true;
                            rel.ReferenceTable = reader.Value;
                            break;

                        case "referenceColumn":
                            loadedRel           = true;
                            rel.ReferenceColumn = reader.Value;
                            break;

                        case "referenceProperty":
                            loadedRel             = true;
                            rel.ReferenceProperty = reader.Value;
                            break;

                        case "refConstraint":
                            loadedRel = true;
                            rel.ReferenceConstraintName = reader.Value;
                            break;

                        case "refEntity":
                            loadedRel = true;
                            rel.ReferenceEntityName = reader.Value;
                            break;

                        case "exclude":
                            loadedRel   = true;
                            rel.Exclude = ReadBool(reader.Value);
                            break;

                        case "inverse":
                            loadedRel   = true;
                            rel.Inverse = ReadBool(reader.Value);
                            break;

                        case "mapColumn":
                            loadedRel     = true;
                            rel.MapColumn = reader.Value;
                            break;

                        case "mapReferenceColumn":
                            loadedRel = true;
                            rel.MapReferenceColumn = reader.Value;
                            break;

                        case "manyToManyPropertyName":
                            loadedRel = true;
                            rel.ManyToManyPropertyName = reader.Value;
                            break;

                        case "propertyName":
                            loadedRel           = true;
                            rel.MapPropertyName = reader.Value;
                            break;

                        case "mapTable":
                            loadedRel        = true;
                            rel.MapTableName = reader.Value;
                            break;

                        //primary key attributes
                        case "unsaved_value":
                            unsavedValue = reader.Value;
                            break;

                        case "key_generator":
                            keyGen = reader.Value;
                            break;

                        default:
                            if (includeMetaData)
                            {
                                if (!string.IsNullOrWhiteSpace(currentAttribute) && currentAttribute.StartsWith("data_"))
                                {
                                    string metaKey = currentAttribute.Replace("data_", string.Empty);
                                    if (!property.MetaDataAttributes.ContainsKey(metaKey))
                                    {
                                        property.MetaDataAttributes.Add(metaKey, reader.Value);
                                    }
                                }
                            }
                            break;
                        }
                    }

                    if (!string.IsNullOrWhiteSpace(elementName) && elementName.Equals("key", StringComparison.OrdinalIgnoreCase) &&
                        pk != null)
                    {
                        pk.KeyGenerationStrategy = keyGen;
                        pk.UnsavedValueString    = unsavedValue;
                    }

                    if (loadedRel)
                    {
                        rel.LoadPropertyValues(property);
                        return(rel);
                    }

                    if (forceReturnRel)
                    {
                        rel = new Relation(property);
                        return(rel);
                    }

                    return(property);
                }
                return(null);
            }
Example #10
0
            void Read_StatementsElement(XmlReader reader, MapConfig config, EntityMap entMap)
            {
                bool hasReachedEndGracefully = false;
                bool dependsOnEntity         = entMap != null;

                while (reader.Read())
                {
                    StatementMap statement   = null;
                    string       elementName = reader.Name;

                    if (reader.CanReadElement("query") || reader.CanReadElement("insert") || reader.CanReadElement("statement") || reader.CanReadElement("update") || reader.CanReadElement("delete"))
                    {
                        statement = Read_StatementElement(reader, config, elementName);

                        if (string.IsNullOrEmpty(statement.Name))
                        {
                            if (dependsOnEntity)
                            {
                                statement.Name = StatementStore.BuildMappedStatementName(entMap, statement.OperationType);
                                switch (statement.OperationType)
                                {
                                case MappedStatementType.Insert:
                                    entMap.UseMappedInsert = true;
                                    break;

                                case MappedStatementType.Delete:
                                    entMap.UseMappedDelete = true;
                                    break;

                                case MappedStatementType.Update:
                                    entMap.UseMappedUpdate = true;
                                    break;
                                }
                            }
                            else
                            {
                                throw new MappingSerializationException(typeof(StatementMap), "A statement in goliath.data/statements does not have name defined. A name cannot be infered.");
                            }
                        }

                        if (dependsOnEntity)
                        {
                            statement.DependsOnEntity = entMap.FullName;

                            if (string.IsNullOrEmpty(statement.ResultMap))
                            {
                                switch (statement.OperationType)
                                {
                                case MappedStatementType.Update:
                                case MappedStatementType.ExecuteNonQuery:
                                case MappedStatementType.Insert:
                                case MappedStatementType.Delete:
                                    statement.ResultMap = typeof(Int32).ToString();
                                    break;

                                case MappedStatementType.Query:
                                    statement.ResultMap = entMap.FullName;
                                    break;

                                case MappedStatementType.Undefined:
                                    break;

                                default:
                                    break;
                                }
                            }

                            if ((statement.InputParametersMap.Count == 0) && ((statement.OperationType == MappedStatementType.Insert) || (statement.OperationType == MappedStatementType.Update)))
                            {
                                //statement.InputParametersMap.Add("a", entMap.FullName);
                            }
                        }

                        if (string.IsNullOrWhiteSpace(statement.CanRunOn))
                        {
                            //if can run on is empty we expect the platform to be on the main file.
                            if (string.IsNullOrWhiteSpace(config.Settings.Platform))
                            {
                                throw new MappingSerializationException(typeof(StatementMap), string.Format("Statement {0} missing canRunOn. Please specify which platform to run or specify one config rdbms.", statement.Name));
                            }

                            statement.CanRunOn = config.Settings.Platform;
                        }

                        reader.MoveToElement();

                        if (!reader.IsEmptyElement)
                        {
                            while (reader.Read())
                            {
                                if (reader.HasReachedEndOfElement(elementName))
                                {
                                    break;
                                }

                                if ((reader.NodeType == XmlNodeType.Text) || (reader.NodeType == XmlNodeType.CDATA))
                                {
                                    statement.Body = reader.Value;
                                }

                                else if (reader.CanReadElement("dbParameters"))
                                {
                                    while (reader.Read())
                                    {
                                        if (reader.HasReachedEndOfElement("dbParameters"))
                                        {
                                            break;
                                        }

                                        if (reader.CanReadElement("param"))
                                        {
                                            Read_StatementParams(reader, statement);
                                        }
                                    }
                                }
                                else if (reader.CanReadElement("inputParameters"))
                                {
                                    while (reader.Read())
                                    {
                                        if (reader.HasReachedEndOfElement("inputParameters"))
                                        {
                                            break;
                                        }

                                        if (reader.CanReadElement("input"))
                                        {
                                            Read_StatementInputParam(reader, statement);
                                        }
                                    }
                                }
                                else if (reader.CanReadElement("body"))
                                {
                                    while (reader.Read())
                                    {
                                        if (reader.HasReachedEndOfElement("body"))
                                        {
                                            break;
                                        }

                                        if ((reader.NodeType == XmlNodeType.Text) || (reader.NodeType == XmlNodeType.CDATA))
                                        {
                                            statement.Body = reader.Value;
                                        }
                                    }
                                }
                            }
                        }

                        if (statement.OperationType == MappedStatementType.Undefined)
                        {
                            throw new MappingSerializationException(typeof(StatementMap), string.Format("Statement {0} must have have an operationType", statement.Name));
                        }


                        config.UnprocessedStatements.Add(statement);
                    }

                    else if (reader.HasReachedEndOfElement("statements"))
                    {
                        hasReachedEndGracefully = true;
                        break;
                    }
                }

                if (!hasReachedEndGracefully)
                {
                    throw new MappingSerializationException(typeof(StatementMap), "missing a </statements> end tag");
                }
            }
Example #11
0
            void Read_GoDataElements(XmlReader reader, MapConfig config)
            {
                string previousElement = string.Empty;
                string currentElement  = reader.Name;

                while (reader.Read())
                {
                    previousElement = currentElement;
                    currentElement  = reader.Name;


                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        switch (currentElement)
                        {
                        case "entities":
                            if (reader.CanReadElement("entities"))
                            {
                                Read_EntitiesElements(reader, config);
                            }
                            break;

                        case "complexTypes":
                            if (reader.CanReadElement("complexTypes"))
                            {
                                Read_ComplexTypesElement(reader, config);
                            }
                            break;

                        case "project.properties":
                            if (reader.CanReadElement("project.properties"))
                            {
                                Read_Project_PropertiesElement(reader, config);
                            }
                            break;

                        case "statements":
                            if (reader.CanReadElement("statements"))
                            {
                                Read_StatementsElement(reader, config, null);
                            }
                            break;

                        default:
                            break;
                        }
                    }

                    else if (reader.NodeType == XmlNodeType.Text)
                    {
                        switch (previousElement)
                        {
                        case "connectionString":
                            config.Settings.ConnectionString = reader.Value;
                            break;

                        case "tablePrefixes":
                            config.Settings.TablePrefixes = reader.Value;
                            break;

                        case "namespace":
                            config.Settings.Namespace = reader.Value;
                            break;

                        case "baseModel":
                            config.Settings.BaseModel = reader.Value;
                            break;

                        case "generatedBy":
                            config.Settings.GeneratedBy = reader.Value;
                            break;

                        case "supportManyToMany":
                            config.Settings.SupportManyToMany = ReadBool(reader.Value);
                            break;

                        default:
                            break;
                        }
                    }

                    else if (reader.HasReachedEndOfElement("goliath.data"))
                    {
                        return;
                    }
                }

                throw new MappingSerializationException(typeof(MapConfig), "missing a </goliath.data> end tag");
            }