# File lib/flexirecord.rb, line 1186 1186: def save 1187: # TODO: improve efficiency, when a "REPLACE" command is available in PostgreSQL 1188: transaction(:read_committed) do 1189: self.class.lock(:share_row_exclusive) 1190: @saved = 1191: self.class.select_by_value_set(self.class.primary_columns, [self.class.primary_columns.collect { |column| self.read(column) }]).length > 0 1192: copy_primary_key 1193: if self.void 1194: return destroy 1195: else 1196: return super 1197: end 1198: end 1199: end