예제 #1
0
        protected override string WriteDataType(DatabaseColumn column)
        {
            var type = new DataTypeWriter().WriteDataType(column);

            if (column.IsPrimaryKey && (Table.PrimaryKey == null || Table.PrimaryKey.Columns.Count == 1))
            {
                type += " PRIMARY KEY";
                if (column.IsAutoNumber) //must be integer primary key
                {
                    return("INTEGER PRIMARY KEY AUTOINCREMENT");
                }
            }
            if (!column.Nullable)
            {
                type += " NOT NULL";
            }
            //if there's a default value, and it's not a guid generator or autonumber
            if (!string.IsNullOrEmpty(column.DefaultValue) &&
                !SqlTranslator.IsGuidGenerator(column.DefaultValue) &&
                !column.IsAutoNumber)
            {
                var value = SqlTranslator.Fix(column.DefaultValue);
                //SqlServer (N'string') format
                if (value.StartsWith("(N'", StringComparison.OrdinalIgnoreCase))
                {
                    value = value.Replace("(N'", "('");
                }
                type += " DEFAULT " + value;
            }

            return(type);
        }
예제 #2
0
        protected override string WriteDataType(DatabaseColumn column)
        {
            var type = new DataTypeWriter().WriteDataType(column);

            if (column.IsPrimaryKey && (Table.PrimaryKey == null || Table.PrimaryKey.Columns.Count == 1))
            {
                type += " PRIMARY KEY";
                if (column.IsIdentity)
                {
                    type += " AUTOINCREMENT";
                }
            }
            if (!column.Nullable)
            {
                type += " NOT NULL";
            }
            //if there's a default value, and it's not a guid generator
            if (!string.IsNullOrEmpty(column.DefaultValue) && !SqlTranslator.IsGuidGenerator(column.DefaultValue))
            {
                var value = SqlTranslator.Fix(column.DefaultValue);
                type += " DEFAULT " + value;
            }

            return(type);
        }
예제 #3
0
 protected virtual string FixDefaultValue(string defaultValue)
 {
     if (SqlTranslator.IsGuidGenerator(defaultValue) && !"newsequentialid()".Equals(defaultValue, StringComparison.OrdinalIgnoreCase))
     {
         return("newid()");
     }
     return(SqlTranslator.Fix(defaultValue));
 }
예제 #4
0
 private static string FixDefaultValue(string defaultValue)
 {
     //Guid defaults.
     if (SqlTranslator.IsGuidGenerator(defaultValue))
     {
         return("uuid_generate_v1()"); //use uuid-osp contrib
     }
     return(SqlTranslator.Fix(defaultValue));
 }
예제 #5
0
 private static string FixDefaultValue(DatabaseColumn column)
 {
     //Guid defaults.
     if (SqlTranslator.IsGuidGenerator(column.DefaultValue))
     {
         return("SYS_GUID()");
     }
     return(SqlTranslator.Fix(column.DefaultValue));
 }
예제 #6
0
 private static string FixDefaultValue(string defaultValue)
 {
     //Guid defaults.
     if (SqlTranslator.IsGuidGenerator(defaultValue))
     {
         return("UUID()");
     }
     return(SqlTranslator.Fix(defaultValue));
 }
예제 #7
0
 private static string TranslateCheckExpression(string expression)
 {
     expression = SqlTranslator.Fix(expression);
     //translate SqlServer-isms into MySql
     return(expression
            //column escaping
            .Replace("[", "`")
            .Replace("]", "`"));
 }
예제 #8
0
 private static string FixDefaultValue(string defaultValue)
 {
     //Guid defaults.
     if (SqlTranslator.IsGuidGenerator(defaultValue))
     {
         return(null); //there is no native guid (uuid) generator in DB2
     }
     return(SqlTranslator.Fix(defaultValue));
 }
예제 #9
0
        private static string TranslateCheckExpression(string expression)
        {
            expression = SqlTranslator.Fix(expression);

            return(expression
                   //column escaping
                   .Replace("[", "\"")
                   .Replace("]", "\"")
                   //MySql column escaping
                   .Replace("`", "\"")
                   .Replace("`", "\""));
        }
예제 #10
0
 private static string FixDefaultValue(DatabaseColumn column)
 {
     //Guid defaults.
     if (SqlTranslator.IsGuidGenerator(column.DefaultValue))
     {
         return("SYS_GUID()");
     }
     //standard oracle shouldn't be translated
     foreach (var s in OracleFunctions)
     {
         if (string.Equals(column.DefaultValue, s, StringComparison.OrdinalIgnoreCase))
         {
             return(column.DefaultValue);
         }
     }
     return(SqlTranslator.Fix(column.DefaultValue));
 }
예제 #11
0
        protected override void AddTableConstraints(IList <string> columnList)
        {
            var formatter = SqlFormatProvider();

            if (Table.PrimaryKey != null && Table.PrimaryKey.Columns.Count > 1)
            {
                columnList.Add("PRIMARY KEY (" + GetColumnList(Table.PrimaryKey.Columns) + ")");
            }
            foreach (var uniqueKey in Table.UniqueKeys)
            {
                columnList.Add("UNIQUE (" + GetColumnList(uniqueKey.Columns) + ")");
            }
            foreach (var checkConstraint in Table.CheckConstraints)
            {
                var expression = SqlTranslator.Fix(checkConstraint.Expression);
                //nothing to write?
                if (string.IsNullOrEmpty(expression))
                {
                    continue;
                }

                //check if Access and reformat
                if (checkConstraint.Name.Contains("]."))
                {
                    //access format names [table].[column].ValidationRule
                    //access expression doesn't have column name so take it from constraint name
                    var columnName = checkConstraint.Name.Substring(0, checkConstraint.Name.LastIndexOf("].", System.StringComparison.Ordinal) + 1)
                                     .Replace("[" + Table.Name + "].", "");
                    //must have braces
                    expression = "(" + columnName + " " + expression + ")";
                }

                columnList.Add("CHECK " + expression);
            }

            //http://www.sqlite.org/foreignkeys.html These aren't enabled by default.
            foreach (var foreignKey in Table.ForeignKeys)
            {
                var referencedTable = foreignKey.ReferencedTable(Table.DatabaseSchema);
                //can't find the table. Don't write the fk reference.
                if (referencedTable == null)
                {
                    continue;
                }
                string refColumnList;
                if (referencedTable.PrimaryKey == null && referencedTable.PrimaryKeyColumn != null)
                {
                    refColumnList = referencedTable.PrimaryKeyColumn.Name;
                }
                else if (referencedTable.PrimaryKey == null)
                {
                    continue; //can't find the primary key
                }
                else
                {
                    refColumnList = GetColumnList(referencedTable.PrimaryKey.Columns);
                }

                columnList.Add(string.Format(CultureInfo.InvariantCulture,
                                             "FOREIGN KEY ({0}) REFERENCES {1} ({2})",
                                             GetColumnList(foreignKey.Columns),
                                             formatter.Escape(foreignKey.RefersToTable),
                                             refColumnList));
            }
        }