private void CreateUpdateCommandText() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine($"UPDATE {tableName.QuotedString}"); stringBuilder.Append($"SET {SQLiteManagementUtils.CommaSeparatedUpdateFromParameters(this.TableDescription)}"); stringBuilder.Append($"WHERE {SQLiteManagementUtils.WhereColumnAndParameters(this.TableDescription.PrimaryKey.Columns, "")}"); stringBuilder.AppendLine($" AND ((SELECT [timestamp] FROM {trackingName.QuotedObjectName} "); stringBuilder.AppendLine($" WHERE {SQLiteManagementUtils.JoinTwoTablesOnClause(this.TableDescription.PrimaryKey.Columns, tableName.QuotedObjectName, trackingName.QuotedObjectName)}"); stringBuilder.AppendLine(" ) <= @sync_min_timestamp OR @sync_force_write = 1"); stringBuilder.AppendLine(");"); this.AddName(DbCommandType.UpdateRow, stringBuilder.ToString()); }
private string DeleteTriggerBodyText() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine(); stringBuilder.AppendLine("BEGIN"); stringBuilder.AppendLine($"UPDATE {trackingName.QuotedString} "); stringBuilder.AppendLine("SET [sync_row_is_tombstone] = 1"); stringBuilder.AppendLine("\t,[update_scope_id] = NULL -- since the update if from local, it's a NULL"); stringBuilder.AppendLine($"\t,[update_timestamp] = {SQLiteObjectNames.TimestampValue}"); stringBuilder.AppendLine($"\t,[timestamp] = {SQLiteObjectNames.TimestampValue}"); stringBuilder.AppendLine("\t,[last_change_datetime] = datetime('now')"); // -------------------------------------------------------------------------------- // SQLITE doesnot support (yet) filtering columns, since it's only a client provider // -------------------------------------------------------------------------------- //// Filter columns //if (this.Filters != null) //{ // for (int i = 0; i < this.Filters.Count; i++) // { // var filterColumn = this.Filters[i]; // if (this.tableDescription.PrimaryKey.Columns.Any(c => c.ColumnName == filterColumn.ColumnName)) // continue; // ObjectNameParser columnName = new ObjectNameParser(filterColumn.ColumnName); // stringBuilder.AppendLine($"\t,{columnName.QuotedString} = [d].{columnName.QuotedString}"); // } // stringBuilder.AppendLine(); //} stringBuilder.Append($"WHERE "); stringBuilder.Append(SQLiteManagementUtils.JoinTwoTablesOnClause(this.tableDescription.PrimaryKey.Columns, trackingName.QuotedString, "old")); stringBuilder.AppendLine(";"); stringBuilder.AppendLine("END;"); return(stringBuilder.ToString()); }