 				guard case .tuple(let rs) = self.stack.popLast()! else { fatalError() }
 				guard case .columnList(let cs) = self.stack.popLast()! else { fatalError() }
 				guard case .tableIdentifier(let tn) = self.stack.popLast()! else { fatalError() }
-				self.stack.append(.statement(.insert(into: tn, columns: cs, values: [rs])))
+				guard case .statement(let statement) = self.stack.popLast()! else { fatalError() }
+				guard case .insert(var insert) = statement else { fatalError() }
+
+				insert.into = tn
+				insert.columns = cs
+				insert.values = [rs]
+
+				self.stack.append(.statement(.insert(insert)))
 			})
 
 		// Statement categories


	var isMutating: Bool {
		switch self {
		case .create, .drop, .delete, .update, .insert(into:_, columns:_, values:_):
			return true

		case .select(_):

		case .drop(let table):
			return "DROP TABLE \(table.sql(dialect: dialect));"

		case .insert(let insert):
			let colSQL = insert.columns.map { $0.sql(dialect: dialect) }.joined(separator: ", ")
			let tupleSQL = insert.values.map { tuple in
				let ts = tuple.map { $0.sql(dialect: dialect) }.joined(separator: ",")
				return "(\(ts))"
				}.joined(separator: ", ")

			let orReplaceSQL = insert.orReplace ? " OR REPLACE" : ""
			return "INSERT\(orReplaceSQL) INTO \(insert.into.sql(dialect: dialect)) (\(colSQL)) VALUES \(tupleSQL);"

		case .update:
			return "UPDATE;"
