@@ -900,7 +900,7 @@ public class ColumnInfo
900
900
901
901
public int notnull { get ; set ; }
902
902
903
- // public string dflt_value { get; set; }
903
+ public string dflt_value { get ; set ; }
904
904
905
905
// public int pk { get; set; }
906
906
@@ -924,23 +924,35 @@ public List<ColumnInfo> GetTableInfo (string tableName)
924
924
void MigrateTable ( TableMapping map , List < ColumnInfo > existingCols )
925
925
{
926
926
var toBeAdded = new List < TableMapping . Column > ( ) ;
927
+ var toBeDefaulted = new List < TableMapping . Column > ( ) ;
927
928
928
929
foreach ( var p in map . Columns ) {
929
930
var found = false ;
931
+ var defaulted = false ;
930
932
foreach ( var c in existingCols ) {
931
933
found = ( string . Compare ( p . Name , c . Name , StringComparison . OrdinalIgnoreCase ) == 0 ) ;
932
- if ( found )
934
+ if ( found ) {
935
+ defaulted = c . dflt_value != null ;
933
936
break ;
937
+ }
934
938
}
935
939
if ( ! found ) {
936
940
toBeAdded . Add ( p ) ;
937
941
}
942
+ else if ( ! defaulted && p . HasDefaultValue ) {
943
+ toBeDefaulted . Add ( p ) ;
944
+ }
938
945
}
939
946
940
947
foreach ( var p in toBeAdded ) {
941
948
var addCol = "alter table \" " + map . TableName + "\" add column " + Orm . SqlDecl ( p , StoreDateTimeAsTicks , StoreTimeSpanAsTicks ) ;
942
949
Execute ( addCol ) ;
943
950
}
951
+
952
+ foreach ( var p in toBeDefaulted ) {
953
+ var updateCol = "update \" " + map . TableName + "\" set \" " + p . Name + "\" = \" " + p . DefaultValue ? . ToString ( ) + "\" where \" " + p . Name + "\" is null" ;
954
+ Execute ( updateCol ) ;
955
+ }
944
956
}
945
957
946
958
/// <summary>
@@ -2431,10 +2443,18 @@ public class ColumnAttribute : Attribute
2431
2443
{
2432
2444
public string Name { get ; set ; }
2433
2445
2446
+ public object DefaultValue { get ; private set ; }
2447
+
2434
2448
public ColumnAttribute ( string name )
2435
2449
{
2436
2450
Name = name ;
2437
2451
}
2452
+
2453
+ public ColumnAttribute ( string name , object defaultValue )
2454
+ {
2455
+ Name = name ;
2456
+ DefaultValue = defaultValue ;
2457
+ }
2438
2458
}
2439
2459
2440
2460
[ AttributeUsage ( AttributeTargets . Property ) ]
@@ -2703,6 +2723,9 @@ public class Column
2703
2723
2704
2724
public bool StoreAsText { get ; private set ; }
2705
2725
2726
+ public bool HasDefaultValue => DefaultValue != null ;
2727
+ public object DefaultValue { get ; private set ; }
2728
+
2706
2729
public Column ( MemberInfo member , CreateFlags createFlags = CreateFlags . None )
2707
2730
{
2708
2731
_member = member ;
@@ -2717,6 +2740,9 @@ public Column (MemberInfo member, CreateFlags createFlags = CreateFlags.None)
2717
2740
colAttr . ConstructorArguments [ 0 ] . Value ? . ToString ( ) :
2718
2741
member . Name ;
2719
2742
#endif
2743
+ DefaultValue = colAttr != null && colAttr . ConstructorArguments . Count > 1 ?
2744
+ colAttr . ConstructorArguments [ 1 ] . Value : null ;
2745
+
2720
2746
//If this type is Nullable<T> then Nullable.GetUnderlyingType returns the T, otherwise it returns null, so get the actual type instead
2721
2747
ColumnType = Nullable . GetUnderlyingType ( memberType ) ?? memberType ;
2722
2748
Collation = Orm . Collation ( member ) ;
@@ -2877,6 +2903,9 @@ public static string SqlDecl (TableMapping.Column p, bool storeDateTimeAsTicks,
2877
2903
if ( ! string . IsNullOrEmpty ( p . Collation ) ) {
2878
2904
decl += "collate " + p . Collation + " " ;
2879
2905
}
2906
+ if ( p . HasDefaultValue ) {
2907
+ decl += "default \" " + p . DefaultValue ? . ToString ( ) + "\" " ;
2908
+ }
2880
2909
2881
2910
return decl ;
2882
2911
}
0 commit comments