// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef SQL_RECOVER_MODULE_PARSING_H_ #define SQL_RECOVER_MODULE_PARSING_H_ #include namespace sql { namespace recover { enum class ValueType; // The declared data type of a virtual table column. enum class ModuleColumnType { kInteger, kFloat, kText, kBlob, kNumeric, kRowId, kAny, }; // User-supplied specification for recovering a column in a corrupted table. struct RecoveredColumnSpec { // False if this represents a parsing error. bool IsValid() const { return !name.empty(); } // Column description suitable for use in a CREATE TABLE statement. std::string ToCreateTableSql() const; // True if the given value type is admitted by this column specification. bool IsAcceptableValue(ValueType value_type) const; // Column name reported to the SQLite engine. // // The empty string is (ab)used for representing invalid column information, // which can be used to communicate parsing errors. std::string name; // The column's canonical type. ModuleColumnType type; // If true, recovery will skip over null values in this column. bool is_non_null = false; // If true, recovery will accept values in this column with compatible types. bool is_strict = false; }; // Parses a SQLite module argument that holds a table column specification. // // Returns an invalid specification (IsValid() returns false) on parsing errors. RecoveredColumnSpec ParseColumnSpec(const char* sqlite_arg); // User-supplied SQL table identifier. // // This points to the table whose data is being recovered. struct TargetTableSpec { // False if this represents a parsing error. bool IsValid() const { return !table_name.empty(); } // The name of the attachment point of the database containing the table. std::string db_name; // The name of the table. Uniquely identifies a table in a database. std::string table_name; }; // Parses a SQLite module argument that points to a table. TargetTableSpec ParseTableSpec(const char* sqlite_arg); } // namespace recover } // namespace sql #endif // SQL_RECOVER_MODULE_PARSING_H_