Example #1
0
 public void CopyFrom(ColumnMetadata col)
 {
     if (col == null)
         return;
     if (!string.IsNullOrWhiteSpace(col.schema_name))
         schema_name = col.schema_name;
     if (!string.IsNullOrWhiteSpace(col.table_name))
         table_name = col.table_name;
     if (!string.IsNullOrWhiteSpace(col.column_name))
         column_name = col.column_name;
     if (col.column_ordinal != null)
         column_ordinal = col.column_ordinal;
     if (!string.IsNullOrWhiteSpace(col.data_type))
         data_type = col.data_type;
     if (col.is_nullable != null)
         is_nullable = col.is_nullable;
     if (!string.IsNullOrWhiteSpace(col.constraint_name))
         constraint_name = col.constraint_name;
     if (!string.IsNullOrWhiteSpace(col.unique_constraint_name))
         unique_constraint_name = col.unique_constraint_name;
     if (!string.IsNullOrWhiteSpace(col.unique_constraint_schema))
         unique_constraint_schema = col.unique_constraint_schema;
     if (col.is_auto_increment != null)
         is_auto_increment = col.is_auto_increment;
     if (col.string_length != null)
         string_length = col.string_length;
     if (!string.IsNullOrWhiteSpace(col.precision))
         precision = col.precision;
 }
Example #2
0
 public static bool TryParseJson(string jsonText, out ColumnMetadata columnOut)
 {
     columnOut = null;
     if (string.IsNullOrWhiteSpace(jsonText))
         return false;
     try
     {
         var data = Encoding.UTF8.GetBytes(jsonText);
         var jsonSerializer = new DataContractJsonSerializer(typeof(ColumnMetadata));
         using (var ms = new MemoryStream(data))
         {
             columnOut = (ColumnMetadata)jsonSerializer.ReadObject(ms);
             return true;
         }
     }
     catch
     {
         columnOut = null;
         return false;
     }
 }
Example #3
0
        public Ef35PropertyAttr(ColumnMetadata md, bool addUpdateCheckNever)
        {
            Name = Etc.ExtractLastWholeWord(md.column_name, Constants.DEFAULT_TYPE_SEPARATOR);
            _composedName = Compose.PropertyName(md.column_name);
            DbType = md.data_type.ToUpper();

            if (Lexicon.Mssql2HbmTypes.ContainsKey(md.data_type) && Lexicon.Mssql2HbmTypes[md.data_type] == "AnsiString")
            {
                if (md.string_length != null && md.string_length < 0)
                {
                    DbType = string.Format("{0}(MAX)", DbType);
                }
                else
                {
                    DbType = string.Format("{0}({1})", DbType, md.string_length);
                }

            }
            if (Globals.MssqlTypesWithPrecision.Contains(md.data_type))
            {
                DbType = string.Format("{0}({1})", DbType, md.precision);
            }

            if (md.is_nullable != null && md.is_nullable.Value == false)
            {
                DbType = string.Format("{0} NOT NULL", DbType);
                CanBeNull = false;
            }
            else
            {
                CanBeNull = true;
            }

            if (md.is_auto_increment != null && md.is_auto_increment.Value)
            {
                DbType = string.Format("{0} IDENTITY", DbType);
                IsPrimaryKey = true;
                IsDbGenerated = true;
            }
            IsUpdateCheckNever = addUpdateCheckNever;
        }
Example #4
0
        internal static ColumnMetadata GetFromAllColumnMetadata(ColumnMetadata cm)
        {
            if (cm == null || string.IsNullOrWhiteSpace(cm.table_name) || string.IsNullOrWhiteSpace(cm.column_name))
                return null;

            var acCol = DbContainers.AllColumns.Data.FirstOrDefault(
                                x => string.Equals(x.table_name, cm.table_name, StringComparison.OrdinalIgnoreCase) &&
                                     string.Equals(x.column_name, cm.column_name, StringComparison.OrdinalIgnoreCase));

            return acCol;
        }
Example #5
0
        internal static void CopyFromDataSrc(this ColumnMetadata col, ColumnMetadata[] data)
        {
            var entry =
                data.FirstOrDefault(
                    x =>
                        string.Equals(x.table_name, col.table_name, C) &&
                        string.Equals(x.column_name, col.column_name, C));

            if (entry == null)
                return;

            col.CopyFrom(entry);
        }
Example #6
0
 protected internal void AddToSimpleColumns(string key, ColumnMetadata val)
 {
     if (_simpleColumns.ContainsKey(key))
     {
         _simpleColumns[key] = val;
     }
     else
     {
         _simpleColumns.Add(key, val);
     }
 }
Example #7
0
        protected internal void GetCompositeKeyProperties()
        {
            if (!IsCompositeKey)
            {
                return;
            }
            var kmtoProps =
                _hbmXml.SelectNodes(
                    CreateXpath(HbmXmlNames.HIBERNATE_MAPPING, HbmXmlNames.CLASS, HbmXmlNames.COMPOSITE_ID,
                                HbmXmlNames.KEY_MANY_TO_ONE), _nsMgr);
            var keyProps = _hbmXml.SelectNodes(
                CreateXpath(HbmXmlNames.HIBERNATE_MAPPING, HbmXmlNames.CLASS, HbmXmlNames.COMPOSITE_ID,
                            HbmXmlNames.KEY_PROPERTY), _nsMgr);

            if (kmtoProps != null)
            {
                foreach (
                    var kmto in
                    kmtoProps.Cast <XmlElement>()
                    .Where(
                        t =>
                        t != null && t.HasAttributes && t.Attributes[HbmXmlNames.NAME] != null &&
                        t.Attributes[HbmXmlNames.CLASS] != null))
                {
                    var kpName = kmto.Attributes[HbmXmlNames.NAME].Value;
                    var kpType = (new NfTypeName(kmto.Attributes[HbmXmlNames.CLASS].Value)).FullName;

                    //filter list used in GetAllTablesColumns
                    _keyManyToOnePropertyNames.Add(kpName);
                    AddToCompositeKeyProperties(kpName, kpType);

                    //add the comment data
                    if (!kmto.HasChildNodes)
                    {
                        continue;
                    }

                    var columnNode = kmto.FirstChild;
                    while (columnNode != null)
                    {
                        if (!columnNode.HasChildNodes)
                        {
                            columnNode = columnNode.NextSibling;
                            continue;
                        }

                        var pn =
                            Compose.PropertyName(
                                columnNode.Attributes[HbmXmlNames.NAME].Value.Replace("[", string.Empty)
                                .Replace("]", string.Empty));
                        var            columnJson = columnNode.FirstChild.InnerText;
                        ColumnMetadata dataOut;
                        if (!ColumnMetadata.TryParseJson(columnJson, out dataOut))
                        {
                            columnNode = columnNode.NextSibling;
                            continue;
                        }
                        AddToKeyColumns(pn, dataOut);

                        columnNode = columnNode.NextSibling;
                    }
                }
            }
            if (keyProps == null)
            {
                return;
            }
            foreach (
                var kp in
                keyProps.Cast <XmlElement>()
                .Where(
                    t =>
                    t != null && t.HasAttributes && t.Attributes[HbmXmlNames.NAME] != null &&
                    t.Attributes[HbmXmlNames.TYPE] != null))
            {
                var kpName = kp.Attributes[HbmXmlNames.NAME].Value;
                var kpType = Lexicon.Hbm2NetTypes[(kp.Attributes[HbmXmlNames.TYPE].Value)];
                AddToCompositeKeyProperties(kpName, kpType);
                if (!kp.HasChildNodes || !kp.FirstChild.HasChildNodes)
                {
                    continue;
                }
                var            columnNode = kp.FirstChild;
                var            columnJson = columnNode.FirstChild.InnerText;
                ColumnMetadata dataOut;
                if (ColumnMetadata.TryParseJson(columnJson, out dataOut))
                {
                    AddToKeyColumns(kpName, dataOut);
                }
            }
        }
Example #8
0
        internal static XElement GetSimplePropertyHbmXml(ColumnMetadata entry, string xElementName)
        {
            if (entry == null)
                return null;
            if (string.IsNullOrWhiteSpace(xElementName))
                xElementName = Globals.HbmXmlNames.PROPERTY;
            if (string.IsNullOrWhiteSpace(entry.data_type) &&
                Sorting.DbContainers.AllColumns.Data.Any(
                    x => string.Equals(x.column_name, entry.constraint_name, Sorting.C)))
            {
                var acEntry =
                    Sorting.DbContainers.AllColumns.Data.First(
                        x => string.Equals(x.column_name, entry.constraint_name, Sorting.C));
                entry.CopyFrom(acEntry);
            }
            else
            {
                entry.CopyFrom(Sorting.GetFromAllColumnMetadata(entry));
            }

            var simplePropName = Compose.PropertyName(entry.column_name);
            var simplePropColumn = Util.Etc.ExtractLastWholeWord(entry.column_name, null);

            var simplePropDataType = Globals.HbmXmlNames.ANSI_STRING;

            if (!Util.Lexicon.DotNet2HbmTypes.ContainsKey(string.Format("{0}", entry.data_type)) &&
                !Util.Lexicon.Mssql2HbmTypes.ContainsKey(string.Format("{0}", entry.data_type)))
            {
                Console.WriteLine("{0:yyyy-MM-dd HH:mm:ss.ffff} '{1}' has no matching type in the Lexicon [{2}].",
                    DateTime.Now,
                    entry.data_type, entry.ToJsonString());
            }
            else
            {
                simplePropDataType = entry.data_type.StartsWith("System.")
                    ? Util.Lexicon.DotNet2HbmTypes[entry.data_type]
                    : Util.Lexicon.Mssql2HbmTypes[entry.data_type];
            }

            var simplePropLen = simplePropDataType == Globals.HbmXmlNames.ANSI_STRING
                ? entry.string_length == null || entry.string_length <= 0 ? Globals.MSSQL_MAX_VARCHAR : entry.string_length
                : null;

            if (simplePropDataType == typeof (Boolean).Name)
            {
                if (simplePropName.StartsWith(Util.NfTypeName.DefaultNamePrefix))
                    simplePropName = simplePropName.Remove(0, Util.NfTypeName.DefaultNamePrefix.Length);
                simplePropName = "Is" + simplePropName;
            }

            return XeFactory.PropertyNode(xElementName, simplePropName, simplePropColumn,
                simplePropDataType, simplePropLen.ToString(), entry.is_nullable.HasValue && entry.is_nullable == true,
                entry.ToJsonString());
        }
Example #9
0
        internal static void GetSimpleId(ColumnMetadata pkId, XElement classXe)
        {
            pkId.CopyFrom(Sorting.GetFromAllColumnMetadata(pkId));
            var fullColumnName = pkId.column_name;

            Compose.ValidSplit(fullColumnName, 3);
            var columnName = Util.Etc.ExtractLastWholeWord(fullColumnName, null);
            const string propertyName = Globals.HbmXmlNames.ID;
            var type = Util.Lexicon.Mssql2HbmTypes[(pkId.data_type)];
            var length = pkId.string_length ?? Globals.MSSQL_MAX_VARCHAR;
            XElement idXe;
            //don't let the '-1' from the database make it to the hbm.xml's
            if (string.Equals(type, Globals.HbmXmlNames.ANSI_STRING))
            {
                if (length <= 0)
                    length = Globals.MSSQL_MAX_VARCHAR;
                idXe = XeFactory.IdNode(propertyName, columnName, type,
                    length.ToString(CultureInfo.InvariantCulture),pkId.ToJsonString());
            }
            else
            {
                idXe = XeFactory.IdNode(propertyName, columnName, type, pkId.ToJsonString());
            }

            //simple split of assigned or is_identity
            XElement generatorXe;
            if (pkId.is_auto_increment.HasValue && pkId.is_auto_increment.Value)
            {
                generatorXe = XeFactory.GeneratorId(Globals.HbmXmlNames.IDENTITY);
            }
            else
            {
                generatorXe = XeFactory.GeneratorId(Globals.HbmXmlNames.ASSIGNED);
            }
            idXe.Add(generatorXe);
            classXe.Add(idXe);
        }