Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit d91d476

Browse files
committed
Merge pull request #207 from angelcolmenares/master
DDL : 1.Added OnFkOption.SetDefault.
2 parents 78703bf + 5489241 commit d91d476

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

src/ServiceStack.OrmLite.DDLTest/Test.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public void TestFixtureSetup()
2525
AddColumnString="ALTER TABLE Model ADD Column1 VARCHAR(128) ;",
2626
AlterColumnString="ALTER TABLE Model ALTER Column2 VARCHAR(50) ;",
2727
ChangeColumnNameString="ALTER TABLE Model ALTER OldColumn3 TO Column3 ;",
28-
AddFKString="ALTER TABLE Child ADD CONSTRAINT JustOneFK FOREIGN KEY (IdModel) REFERENCES Model (Id) ON UPDATE NO ACTION ON DELETE CASCADE;",
28+
AddFKString="ALTER TABLE Child ADD CONSTRAINT JustOneFK FOREIGN KEY (IdModel) REFERENCES Model (Id) ON DELETE CASCADE ON UPDATE NO ACTION;",
29+
AddFKRestrictString="ALTER TABLE Child ADD CONSTRAINT JustOneMoreFK FOREIGN KEY (IdModel) REFERENCES Model (Id) ON UPDATE NO ACTION;",
2930
CreateIndexString="CREATE UNIQUE INDEX JustIndexOnColumn3 ON Model(Column3);"
3031

3132
});
@@ -34,7 +35,8 @@ public void TestFixtureSetup()
3435
AddColumnString="ALTER TABLE `Model` ADD COLUMN `Column1` VARCHAR(255) NULL;",
3536
AlterColumnString="ALTER TABLE `Model` MODIFY COLUMN `Column2` VARCHAR(50) NULL;",
3637
ChangeColumnNameString="ALTER TABLE `Model` CHANGE COLUMN `OldColumn3` `Column3` VARCHAR(255) NULL;",
37-
AddFKString="ALTER TABLE `Child` ADD CONSTRAINT `JustOneFK` FOREIGN KEY (`IdModel`) REFERENCES `Model` (`Id`) ON UPDATE NO ACTION ON DELETE CASCADE;",
38+
AddFKString="ALTER TABLE `Child` ADD CONSTRAINT `JustOneFK` FOREIGN KEY (`IdModel`) REFERENCES `Model` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION;",
39+
AddFKRestrictString="ALTER TABLE `Child` ADD CONSTRAINT `JustOneMoreFK` FOREIGN KEY (`IdModel`) REFERENCES `Model` (`Id`) ON DELETE RESTRICT ON UPDATE NO ACTION;",
3840
CreateIndexString="CREATE UNIQUE INDEX `JustIndexOnColumn3` ON `Model`(`Column3`);"
3941
});
4042

@@ -91,7 +93,22 @@ public void CanAddForeignKey ()
9193
foreach (var d in dialects)
9294
{
9395
OrmLiteConfig.DialectProvider=d.Provider;
94-
Assert.AreEqual(d.AddFKString,d.Provider.ToAddForeignKeyStatement<Child,Model>(f=>f.IdModel, fk=>fk.Id,OnFkOption.NoAction,OnFkOption.Cascade, "JustOneFK"));
96+
Assert.AreEqual(d.AddFKString,
97+
d.Provider.ToAddForeignKeyStatement<Child,Model>(f=>f.IdModel,
98+
fk=>fk.Id,OnFkOption.NoAction,OnFkOption.Cascade, "JustOneFK"));
99+
}
100+
}
101+
102+
[Test()]
103+
public void CanAddForeignKeyRestrict ()
104+
{
105+
106+
foreach (var d in dialects)
107+
{
108+
OrmLiteConfig.DialectProvider=d.Provider;
109+
Assert.AreEqual(d.AddFKRestrictString,
110+
d.Provider.ToAddForeignKeyStatement<Child,Model>(f=>f.IdModel,
111+
fk=>fk.Id,OnFkOption.NoAction,OnFkOption.Restrict, "JustOneMoreFK"));
95112
}
96113
}
97114

@@ -140,6 +157,7 @@ public class Dialect
140157
public string AlterColumnString { get; set; }
141158
public string ChangeColumnNameString { get; set; }
142159
public string AddFKString { get; set; }
160+
public string AddFKRestrictString { get; set; }
143161
public string CreateIndexString { get; set; }
144162

145163
}

src/ServiceStack.OrmLite/OrmLiteDDLExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public enum OnFkOption{
88
Cascade,
99
SetNull,
1010
NoAction,
11+
SetDefault,
1112
Restrict
1213
}
1314

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,14 +1015,14 @@ public virtual string ToAddForeignKeyStatement<T,TForeign>(Expression<Func<T,ob
10151015
"fk_"+sourceMD.ModelName+"_"+ fieldName+"_"+referenceFieldName:
10161016
foreignKeyName);
10171017

1018-
return string.Format("ALTER TABLE {0} ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3} ({4}) ON UPDATE {5} ON DELETE {6};",
1018+
return string.Format("ALTER TABLE {0} ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3} ({4}){5}{6};",
10191019
GetQuotedTableName(sourceMD.ModelName),
10201020
name,
10211021
GetQuotedColumnName(fieldName),
10221022
GetQuotedTableName(referenceMD.ModelName),
10231023
GetQuotedColumnName(referenceFieldName),
1024-
FkOptionToString(onUpdate),
1025-
FkOptionToString(onDelete));
1024+
GetForeignKeyOnDeleteClause(new ForeignKeyConstraint(typeof(T), onDelete: FkOptionToString( onDelete))),
1025+
GetForeignKeyOnUpdateClause(new ForeignKeyConstraint(typeof(T), onUpdate: FkOptionToString(onUpdate))));
10261026
}
10271027

10281028
public virtual string ToCreateIndexStatement<T>(Expression<Func<T,object>> field,
@@ -1046,12 +1046,13 @@ public virtual string ToCreateIndexStatement<T>(Expression<Func<T,object>> field
10461046
}
10471047

10481048

1049-
protected string FkOptionToString(OnFkOption option){
1049+
protected virtual string FkOptionToString(OnFkOption option){
10501050
switch(option){
10511051
case OnFkOption.Cascade: return "CASCADE";
10521052
case OnFkOption.NoAction: return "NO ACTION";
1053-
case OnFkOption.Restrict: return "RESTRICT";
10541053
case OnFkOption.SetNull: return "SET NULL";
1054+
case OnFkOption.SetDefault: return "SET DEFAULT";
1055+
case OnFkOption.Restrict:
10551056
default: return "RESTRICT";
10561057
}
10571058
}

0 commit comments

Comments
 (0)