@@ -21,6 +21,7 @@ public class OnConflictDoUpdate<T1> where T1 : class
2121 ( _pgsqlUpdatePriv = new PostgreSQLUpdate < T1 > ( _pgsqlInsert . InternalOrm , _pgsqlInsert . InternalCommonUtils , _pgsqlInsert . InternalCommonExpression , null ) { InternalTableAlias = "EXCLUDED" }
2222 . NoneParameter ( ) . SetSource ( _pgsqlInsert . InternalSource ) as PostgreSQLUpdate < T1 > ) ;
2323 ColumnInfo [ ] _columns ;
24+ bool _doNothing ;
2425
2526 public OnConflictDoUpdate ( IInsert < T1 > insert , Expression < Func < T1 , object > > columns = null )
2627 {
@@ -86,6 +87,12 @@ public OnConflictDoUpdate<T1> SetRaw(string sql)
8687 return this ;
8788 }
8889
90+ public OnConflictDoUpdate < T1 > DoNothing ( )
91+ {
92+ _doNothing = true ;
93+ return this ;
94+ }
95+
8996 public string ToSql ( )
9097 {
9198 var sb = new StringBuilder ( ) ;
@@ -95,41 +102,48 @@ public string ToSql()
95102 if ( a > 0 ) sb . Append ( ", " ) ;
96103 sb . Append ( _pgsqlInsert . InternalCommonUtils . QuoteSqlName ( _columns [ a ] . Attribute . Name ) ) ;
97104 }
98- sb . Append ( ") DO UPDATE SET\r \n " ) ;
99-
100- var sbSetEmpty = _pgsqlUpdate . InternalSbSet . Length == 0 ;
101- var sbSetIncrEmpty = _pgsqlUpdate . InternalSbSetIncr . Length == 0 ;
102- if ( sbSetEmpty == false || sbSetIncrEmpty == false )
105+ if ( _doNothing )
103106 {
104- if ( sbSetEmpty == false ) sb . Append ( _pgsqlUpdate . InternalSbSet . ToString ( ) . Substring ( 2 ) ) ;
105- if ( sbSetIncrEmpty == false ) sb . Append ( sbSetEmpty ? _pgsqlUpdate . InternalSbSetIncr . ToString ( ) . Substring ( 2 ) : _pgsqlUpdate . InternalSbSetIncr . ToString ( ) ) ;
107+ sb . Append ( ") DO NOTHING" ) ;
106108 }
107109 else
108110 {
109- var colidx = 0 ;
110- foreach ( var col in _pgsqlInsert . InternalTable . Columns . Values )
111+ sb . Append ( ") DO UPDATE SET\r \n " ) ;
112+
113+ var sbSetEmpty = _pgsqlUpdate . InternalSbSet . Length == 0 ;
114+ var sbSetIncrEmpty = _pgsqlUpdate . InternalSbSetIncr . Length == 0 ;
115+ if ( sbSetEmpty == false || sbSetIncrEmpty == false )
111116 {
112- if ( col . Attribute . IsPrimary || _pgsqlUpdate . InternalIgnore . ContainsKey ( col . Attribute . Name ) ) continue ;
117+ if ( sbSetEmpty == false ) sb . Append ( _pgsqlUpdate . InternalSbSet . ToString ( ) . Substring ( 2 ) ) ;
118+ if ( sbSetIncrEmpty == false ) sb . Append ( sbSetEmpty ? _pgsqlUpdate . InternalSbSetIncr . ToString ( ) . Substring ( 2 ) : _pgsqlUpdate . InternalSbSetIncr . ToString ( ) ) ;
119+ }
120+ else
121+ {
122+ var colidx = 0 ;
123+ foreach ( var col in _pgsqlInsert . InternalTable . Columns . Values )
124+ {
125+ if ( col . Attribute . IsPrimary || _pgsqlUpdate . InternalIgnore . ContainsKey ( col . Attribute . Name ) ) continue ;
113126
114- if ( colidx > 0 ) sb . Append ( ", \r \n " ) ;
127+ if ( colidx > 0 ) sb . Append ( ", \r \n " ) ;
115128
116- if ( col . Attribute . IsVersion == true )
117- {
118- var field = _pgsqlInsert . InternalCommonUtils . QuoteSqlName ( col . Attribute . Name ) ;
119- sb . Append ( field ) . Append ( " = " ) . Append ( _pgsqlInsert . InternalCommonUtils . QuoteSqlName ( _pgsqlInsert . InternalTable . DbName ) ) . Append ( "." ) . Append ( field ) . Append ( " + 1" ) ;
120- }
121- else if ( _pgsqlInsert . InternalIgnore . ContainsKey ( col . Attribute . Name ) )
122- {
123- var caseWhen = _pgsqlUpdate . InternalWhereCaseSource ( col . CsName , sqlval => sqlval ) . Trim ( ) ;
124- sb . Append ( caseWhen ) ;
125- if ( caseWhen . EndsWith ( " END" ) ) _pgsqlUpdate . InternalToSqlCaseWhenEnd ( sb , col ) ;
126- }
127- else
128- {
129- var field = _pgsqlInsert . InternalCommonUtils . QuoteSqlName ( col . Attribute . Name ) ;
130- sb . Append ( field ) . Append ( " = EXCLUDED." ) . Append ( field ) ;
129+ if ( col . Attribute . IsVersion == true )
130+ {
131+ var field = _pgsqlInsert . InternalCommonUtils . QuoteSqlName ( col . Attribute . Name ) ;
132+ sb . Append ( field ) . Append ( " = " ) . Append ( _pgsqlInsert . InternalCommonUtils . QuoteSqlName ( _pgsqlInsert . InternalTable . DbName ) ) . Append ( "." ) . Append ( field ) . Append ( " + 1" ) ;
133+ }
134+ else if ( _pgsqlInsert . InternalIgnore . ContainsKey ( col . Attribute . Name ) )
135+ {
136+ var caseWhen = _pgsqlUpdate . InternalWhereCaseSource ( col . CsName , sqlval => sqlval ) . Trim ( ) ;
137+ sb . Append ( caseWhen ) ;
138+ if ( caseWhen . EndsWith ( " END" ) ) _pgsqlUpdate . InternalToSqlCaseWhenEnd ( sb , col ) ;
139+ }
140+ else
141+ {
142+ var field = _pgsqlInsert . InternalCommonUtils . QuoteSqlName ( col . Attribute . Name ) ;
143+ sb . Append ( field ) . Append ( " = EXCLUDED." ) . Append ( field ) ;
144+ }
145+ ++ colidx ;
131146 }
132- ++ colidx ;
133147 }
134148 }
135149
0 commit comments