@@ -454,7 +454,7 @@ public virtual string ToSelectStatement(Type tableType, string sqlFilter, params
454
454
return sqlFilter . SqlFmt ( filterParams ) ;
455
455
456
456
var modelDef = tableType . GetModelDefinition ( ) ;
457
- var sql = new StringBuilder ( "SELECT " + tableType . GetColumnNames ( ) + " FROM " + GetQuotedTableName ( modelDef ) ) ;
457
+ var sql = new StringBuilder ( "SELECT " + GetColumnNames ( modelDef ) + " FROM " + GetQuotedTableName ( modelDef ) ) ;
458
458
459
459
if ( ! string . IsNullOrEmpty ( sqlFilter ) )
460
460
{
@@ -471,6 +471,20 @@ public virtual string ToSelectStatement(Type tableType, string sqlFilter, params
471
471
return sql . ToString ( ) ;
472
472
}
473
473
474
+ public virtual string GetColumnNames ( ModelDefinition modelDef )
475
+ {
476
+ var sqlColumns = new StringBuilder ( ) ;
477
+ foreach ( var field in modelDef . FieldDefinitions )
478
+ {
479
+ if ( sqlColumns . Length > 0 )
480
+ sqlColumns . Append ( ", " ) ;
481
+
482
+ sqlColumns . Append ( GetQuotedColumnName ( field . FieldName ) ) ;
483
+ }
484
+
485
+ return sqlColumns . ToString ( ) ;
486
+ }
487
+
474
488
/// Fmt
475
489
public virtual string ToInsertRowStatement ( IDbCommand command , object objWithProperties , ICollection < string > insertFields = null )
476
490
{
@@ -483,10 +497,12 @@ public virtual string ToInsertRowStatement(IDbCommand command, object objWithPro
483
497
484
498
foreach ( var fieldDef in modelDef . FieldDefinitions )
485
499
{
486
- if ( fieldDef . IsComputed ) continue ;
487
- if ( fieldDef . AutoIncrement ) continue ;
500
+ if ( fieldDef . AutoIncrement || fieldDef . IsComputed || fieldDef . IsRowVersion )
501
+ continue ;
502
+
488
503
//insertFields contains Property "Name" of fields to insert ( that's how expressions work )
489
- if ( insertFields . Count > 0 && ! insertFields . Contains ( fieldDef . Name ) ) continue ;
504
+ if ( insertFields . Count > 0 && ! insertFields . Contains ( fieldDef . Name ) )
505
+ continue ;
490
506
491
507
if ( sbColumnNames . Length > 0 ) sbColumnNames . Append ( "," ) ;
492
508
if ( sbColumnValues . Length > 0 ) sbColumnValues . Append ( "," ) ;
@@ -520,10 +536,12 @@ public virtual void PrepareParameterizedInsertStatement<T>(IDbCommand cmd, IColl
520
536
521
537
foreach ( var fieldDef in modelDef . FieldDefinitionsArray )
522
538
{
523
- if ( fieldDef . AutoIncrement || fieldDef . IsComputed ) continue ;
539
+ if ( fieldDef . AutoIncrement || fieldDef . IsComputed || fieldDef . IsRowVersion )
540
+ continue ;
524
541
525
542
//insertFields contains Property "Name" of fields to insert ( that's how expressions work )
526
- if ( insertFields != null && ! insertFields . Contains ( fieldDef . Name ) ) continue ;
543
+ if ( insertFields != null && ! insertFields . Contains ( fieldDef . Name ) )
544
+ continue ;
527
545
528
546
if ( sbColumnNames . Length > 0 )
529
547
sbColumnNames . Append ( "," ) ;
@@ -548,63 +566,82 @@ public virtual void PrepareParameterizedInsertStatement<T>(IDbCommand cmd, IColl
548
566
GetQuotedTableName ( modelDef ) , sbColumnNames , sbColumnValues ) ;
549
567
}
550
568
551
- public virtual void PrepareParameterizedUpdateStatement < T > ( IDbCommand cmd , ICollection < string > updateFields = null )
569
+ public virtual bool PrepareParameterizedUpdateStatement < T > ( IDbCommand cmd , ICollection < string > updateFields = null )
552
570
{
553
571
var sqlFilter = new StringBuilder ( ) ;
554
572
var sql = new StringBuilder ( ) ;
555
573
var modelDef = typeof ( T ) . GetModelDefinition ( ) ;
574
+ var hadRowVesion = false ;
575
+ var updateAllFields = updateFields == null || updateFields . Count == 0 ;
556
576
557
577
cmd . Parameters . Clear ( ) ;
558
578
cmd . CommandTimeout = OrmLiteConfig . CommandTimeout ;
559
579
560
580
foreach ( var fieldDef in modelDef . FieldDefinitions )
561
581
{
562
- if ( fieldDef . IsComputed ) continue ;
582
+ if ( fieldDef . IsComputed )
583
+ continue ;
584
+
563
585
try
564
586
{
565
- if ( fieldDef . IsPrimaryKey && ( updateFields == null || updateFields . Count == 0 ) )
587
+ if ( ( fieldDef . IsPrimaryKey || fieldDef . IsRowVersion ) && updateAllFields )
566
588
{
567
- if ( sqlFilter . Length > 0 ) sqlFilter . Append ( " AND " ) ;
589
+ if ( sqlFilter . Length > 0 )
590
+ sqlFilter . Append ( " AND " ) ;
568
591
569
- sqlFilter
570
- . Append ( GetQuotedColumnName ( fieldDef . FieldName ) )
571
- . Append ( "=" )
572
- . Append ( this . GetParam ( SanitizeFieldNameForParamName ( fieldDef . FieldName ) ) ) ;
592
+ AppendFieldCondition ( sqlFilter , fieldDef , cmd ) ;
573
593
574
- AddParameter ( cmd , fieldDef ) ;
594
+ if ( fieldDef . IsRowVersion )
595
+ hadRowVesion = true ;
575
596
576
597
continue ;
577
598
}
578
599
579
- if ( ( updateFields != null && updateFields . Count > 0 ) && ! updateFields . Contains ( fieldDef . Name ) )
600
+ if ( ! updateAllFields && ! updateFields . Contains ( fieldDef . Name ) )
580
601
continue ;
581
602
582
603
if ( sql . Length > 0 )
583
604
sql . Append ( ", " ) ;
584
605
585
- sql . Append ( GetQuotedColumnName ( fieldDef . FieldName ) )
586
- . Append ( "=" )
587
- . Append ( this . GetParam ( SanitizeFieldNameForParamName ( fieldDef . FieldName ) ) ) ;
588
-
589
- AddParameter ( cmd , fieldDef ) ;
606
+ AppendFieldCondition ( sql , fieldDef , cmd ) ;
590
607
}
591
608
catch ( Exception ex )
592
609
{
593
610
Log . Error ( "ERROR in PrepareParameterizedUpdateStatement(): " + ex . Message , ex ) ;
594
611
}
595
612
}
596
613
597
- if ( sql . Length < 1 )
598
- return ;
614
+ if ( sql . Length > 0 )
615
+ {
616
+ cmd . CommandText = string . Format ( "UPDATE {0} SET {1} {2}" ,
617
+ GetQuotedTableName ( modelDef ) , sql , ( sqlFilter . Length > 0 ? "WHERE " + sqlFilter : "" ) ) ;
618
+ }
619
+
620
+ return hadRowVesion ;
621
+ }
622
+
623
+ public virtual void AppendFieldCondition ( StringBuilder sqlFilter , FieldDefinition fieldDef , IDbCommand cmd )
624
+ {
625
+ sqlFilter
626
+ . Append ( GetQuotedColumnName ( fieldDef . FieldName ) )
627
+ . Append ( "=" )
628
+ . Append ( this . GetParam ( SanitizeFieldNameForParamName ( fieldDef . FieldName ) ) ) ;
629
+
630
+ AddParameter ( cmd , fieldDef ) ;
631
+ }
599
632
600
- cmd . CommandText = string . Format ( "UPDATE {0} SET {1} {2}" ,
601
- GetQuotedTableName ( modelDef ) , sql , ( sqlFilter . Length > 0 ? "WHERE " + sqlFilter : "" ) ) ;
633
+ public virtual void AppendFieldConditionFmt ( StringBuilder sqlFilter , FieldDefinition fieldDef , object objWithProperties )
634
+ {
635
+ sqlFilter . AppendFormat ( "{0}={1}" ,
636
+ GetQuotedColumnName ( fieldDef . FieldName ) ,
637
+ fieldDef . GetQuotedValue ( objWithProperties ) ) ;
602
638
}
603
639
604
640
public virtual void PrepareParameterizedDeleteStatement < T > ( IDbCommand cmd , ICollection < string > deleteFields = null )
605
641
{
606
642
var sqlFilter = new StringBuilder ( ) ;
607
643
var modelDef = typeof ( T ) . GetModelDefinition ( ) ;
644
+ var hasSpecificFilter = deleteFields != null && deleteFields . Count > 0 ;
608
645
609
646
cmd . Parameters . Clear ( ) ;
610
647
cmd . CommandTimeout = OrmLiteConfig . CommandTimeout ;
@@ -613,20 +650,15 @@ public virtual void PrepareParameterizedDeleteStatement<T>(IDbCommand cmd, IColl
613
650
{
614
651
if ( fieldDef . IsComputed ) continue ;
615
652
616
- if ( ( deleteFields != null && deleteFields . Count > 0 ) && ! deleteFields . Contains ( fieldDef . Name ) )
653
+ if ( hasSpecificFilter && ! deleteFields . Contains ( fieldDef . Name ) )
617
654
continue ;
618
655
619
656
try
620
657
{
621
658
if ( sqlFilter . Length > 0 )
622
659
sqlFilter . Append ( " AND " ) ;
623
660
624
- sqlFilter
625
- . Append ( GetQuotedColumnName ( fieldDef . FieldName ) )
626
- . Append ( "=" )
627
- . Append ( this . GetParam ( SanitizeFieldNameForParamName ( fieldDef . FieldName ) ) ) ;
628
-
629
- AddParameter ( cmd , fieldDef ) ;
661
+ AppendFieldCondition ( sqlFilter , fieldDef , cmd ) ;
630
662
}
631
663
catch ( Exception ex )
632
664
{
@@ -757,33 +789,32 @@ protected virtual object GetAnonValue<T>(FieldDefinition fieldDef, object obj)
757
789
758
790
public virtual string ToUpdateRowStatement ( object objWithProperties , ICollection < string > updateFields = null )
759
791
{
760
- if ( updateFields == null )
761
- updateFields = new List < string > ( ) ;
762
-
763
792
var sqlFilter = new StringBuilder ( ) ;
764
793
var sql = new StringBuilder ( ) ;
765
794
var modelDef = objWithProperties . GetType ( ) . GetModelDefinition ( ) ;
795
+ var updateAllFields = updateFields == null || updateFields . Count == 0 ;
766
796
767
797
foreach ( var fieldDef in modelDef . FieldDefinitions )
768
798
{
769
799
if ( fieldDef . IsComputed ) continue ;
770
800
771
801
try
772
802
{
773
- if ( fieldDef . IsPrimaryKey && updateFields . Count == 0 )
803
+ if ( fieldDef . IsPrimaryKey && updateAllFields )
774
804
{
775
- if ( sqlFilter . Length > 0 ) sqlFilter . Append ( " AND " ) ;
805
+ if ( sqlFilter . Length > 0 )
806
+ sqlFilter . Append ( " AND " ) ;
776
807
777
- sqlFilter . AppendFormat ( "{0}={1}" , GetQuotedColumnName ( fieldDef . FieldName ) , fieldDef . GetQuotedValue ( objWithProperties ) ) ;
808
+ AppendFieldConditionFmt ( sqlFilter , fieldDef , objWithProperties ) ;
778
809
779
810
continue ;
780
811
}
781
812
782
- if ( updateFields . Count > 0 && ! updateFields . Contains ( fieldDef . Name ) || fieldDef . AutoIncrement ) continue ;
813
+ if ( ! updateAllFields && ! updateFields . Contains ( fieldDef . Name ) || fieldDef . AutoIncrement ) continue ;
783
814
if ( sql . Length > 0 )
784
815
sql . Append ( ", " ) ;
785
816
786
- sql . AppendFormat ( "{0}={1}" , GetQuotedColumnName ( fieldDef . FieldName ) , fieldDef . GetQuotedValue ( objWithProperties ) ) ;
817
+ AppendFieldConditionFmt ( sql , fieldDef , objWithProperties ) ;
787
818
}
788
819
catch ( Exception ex )
789
820
{
@@ -811,9 +842,10 @@ public virtual string ToDeleteRowStatement(object objWithProperties)
811
842
{
812
843
if ( fieldDef . IsPrimaryKey )
813
844
{
814
- if ( sqlFilter . Length > 0 ) sqlFilter . Append ( " AND " ) ;
845
+ if ( sqlFilter . Length > 0 )
846
+ sqlFilter . Append ( " AND " ) ;
815
847
816
- sqlFilter . AppendFormat ( "{0} = {1}" , GetQuotedColumnName ( fieldDef . FieldName ) , fieldDef . GetQuotedValue ( objWithProperties ) ) ;
848
+ AppendFieldConditionFmt ( sqlFilter , fieldDef , objWithProperties ) ;
817
849
}
818
850
}
819
851
catch ( Exception ex )
@@ -838,7 +870,8 @@ public virtual string ToDeleteStatement(Type tableType, string sqlFilter, params
838
870
&& sqlFilter . Length > deleteStatement . Length
839
871
&& sqlFilter . Substring ( 0 , deleteStatement . Length ) . ToUpper ( ) . Equals ( deleteStatement ) ;
840
872
841
- if ( isFullDeleteStatement ) return sqlFilter . SqlFmt ( filterParams ) ;
873
+ if ( isFullDeleteStatement )
874
+ return sqlFilter . SqlFmt ( filterParams ) ;
842
875
843
876
var modelDef = tableType . GetModelDefinition ( ) ;
844
877
sql . AppendFormat ( "DELETE FROM {0}" , GetQuotedTableName ( modelDef ) ) ;
@@ -860,8 +893,6 @@ public virtual string ToCreateTableStatement(Type tableType)
860
893
var modelDef = tableType . GetModelDefinition ( ) ;
861
894
foreach ( var fieldDef in modelDef . FieldDefinitions )
862
895
{
863
- if ( sbColumns . Length != 0 ) sbColumns . Append ( ", \n " ) ;
864
-
865
896
var columnDefinition = GetColumnDefinition (
866
897
fieldDef . FieldName ,
867
898
fieldDef . ColumnType ,
@@ -874,6 +905,12 @@ public virtual string ToCreateTableStatement(Type tableType)
874
905
fieldDef . DefaultValue ,
875
906
fieldDef . CustomFieldDefinition ) ;
876
907
908
+ if ( columnDefinition == null )
909
+ continue ;
910
+
911
+ if ( sbColumns . Length != 0 )
912
+ sbColumns . Append ( ", \n " ) ;
913
+
877
914
sbColumns . Append ( columnDefinition ) ;
878
915
879
916
if ( fieldDef . ForeignKey == null ) continue ;
@@ -1005,11 +1042,6 @@ protected virtual string ToCreateIndexStatement(bool isUnique, string indexName,
1005
1042
( isCombined ) ? fieldName : GetQuotedColumnName ( fieldName ) ) ;
1006
1043
}
1007
1044
1008
- public virtual string GetColumnNames ( ModelDefinition modelDef )
1009
- {
1010
- return modelDef . GetColumnNames ( ) ;
1011
- }
1012
-
1013
1045
public virtual List < string > ToCreateSequenceStatements ( Type tableType )
1014
1046
{
1015
1047
return new List < string > ( ) ;
0 commit comments