Index: sql/recovery.cc |
diff --git a/sql/recovery.cc b/sql/recovery.cc |
index 5c4223c024cb650957dc1674762db7494ecb0f68..09e0c37b8fb643c379d46b670e5277bfeef1c8e7 100644 |
--- a/sql/recovery.cc |
+++ b/sql/recovery.cc |
@@ -375,7 +375,6 @@ bool Recovery::AutoRecoverTable(const char* table_name, |
while (s.Step()) { |
const std::string column_name(s.ColumnString(1)); |
const std::string column_type(s.ColumnString(2)); |
- const bool not_null = s.ColumnBool(3); |
const int default_type = s.ColumnType(4); |
const bool default_is_null = (default_type == COLUMN_TYPE_NULL); |
const int pk_column = s.ColumnInt(5); |
@@ -422,16 +421,6 @@ bool Recovery::AutoRecoverTable(const char* table_name, |
return false; |
} |
- // If column has constraint "NOT NULL", then inserting NULL into |
- // that column will fail. If the column has a non-NULL DEFAULT |
- // specified, the INSERT will handle it (see below). If the |
- // DEFAULT is also NULL, the row must be filtered out. |
- // TODO(shess): The above scenario applies to INSERT OR REPLACE, |
- // whereas INSERT OR IGNORE drops such rows. |
- // http://www.sqlite.org/lang_conflict.html |
Ryan Hamilton
2016/02/04 01:38:17
Looks like you planned ahead! Nice comment.
|
- if (not_null && default_is_null) |
- column_decl += " NOT NULL"; |
- |
create_column_decls.push_back(column_decl); |
// Per the NOTE in the header file, convert NULL values to the |
@@ -464,8 +453,10 @@ bool Recovery::AutoRecoverTable(const char* table_name, |
table_name, |
base::JoinString(create_column_decls, ",").c_str())); |
+ // INSERT OR IGNORE means that it will drop rows resulting from constraint |
+ // violations. INSERT OR REPLACE only handles UNIQUE constraint violations. |
std::string recover_insert(base::StringPrintf( |
- "INSERT OR REPLACE INTO main.%s SELECT %s FROM temp.recover_%s", |
+ "INSERT OR IGNORE INTO main.%s SELECT %s FROM temp.recover_%s", |
table_name, |
base::JoinString(insert_columns, ",").c_str(), |
table_name)); |