#include "components/autofill/core/browser/webdata/autocomplete/autocomplete_table.h"
#include <memory>
#include <set>
#include <string>
#include <utility>
#include <vector>
#include "base/debug/crash_logging.h"
#include "base/i18n/case_conversion.h"
#include "base/logging.h"
#include "base/notreached.h"
#include "base/numerics/safe_conversions.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "components/autofill/core/browser/webdata/autocomplete/autocomplete_entry.h"
#include "components/autofill/core/browser/webdata/autofill_change.h"
#include "components/autofill/core/browser/webdata/autofill_table_utils.h"
#include "components/autofill/core/common/autofill_clock.h"
#include "components/autofill/core/common/autofill_constants.h"
#include "components/autofill/core/common/form_field_data.h"
#include "components/crash/core/common/crash_key.h"
#include "components/webdata/common/web_database.h"
#include "sql/statement.h"
#include "sql/transaction.h"
#include "ui/base/l10n/l10n_util.h"
#if BUILDFLAG(IS_WIN)
#include "base/win/nt_status.h"
#endif
namespace autofill {
namespace {
constexpr std::string_view kAutocompleteTable = …;
constexpr std::string_view kName = …;
constexpr std::string_view kValue = …;
constexpr std::string_view kValueLower = …;
constexpr std::string_view kDateCreated = …;
constexpr std::string_view kDateLastUsed = …;
constexpr std::string_view kCount = …;
struct AutocompleteUpdate { … };
WebDatabaseTable::TypeKey GetKey() { … }
time_t GetEndTime(base::Time end) { … }
}
AutocompleteTable::AutocompleteTable() = default;
AutocompleteTable::~AutocompleteTable() = default;
AutocompleteTable* AutocompleteTable::FromWebDatabase(WebDatabase* db) { … }
WebDatabaseTable::TypeKey AutocompleteTable::GetTypeKey() const { … }
bool AutocompleteTable::CreateTablesIfNecessary() { … }
bool AutocompleteTable::MigrateToVersion(int version,
bool* update_compatible_version) { … }
bool AutocompleteTable::AddFormFieldValues(
const std::vector<FormFieldData>& elements,
std::vector<AutocompleteChange>* changes) { … }
bool AutocompleteTable::GetFormValuesForElementName(
const std::u16string& name,
const std::u16string& prefix,
int limit,
std::vector<AutocompleteEntry>& entries) { … }
bool AutocompleteTable::RemoveFormElementsAddedBetween(
base::Time delete_begin,
base::Time delete_end,
std::vector<AutocompleteChange>& changes) { … }
bool AutocompleteTable::RemoveExpiredFormElements(
std::vector<AutocompleteChange>& changes) { … }
bool AutocompleteTable::RemoveFormElement(const std::u16string& name,
const std::u16string& value) { … }
int AutocompleteTable::GetCountOfValuesContainedBetween(base::Time begin,
base::Time end) { … }
bool AutocompleteTable::GetAllAutocompleteEntries(
std::vector<AutocompleteEntry>* entries) { … }
std::optional<AutocompleteEntry> AutocompleteTable::GetAutocompleteEntry(
const std::u16string& name,
const std::u16string& value) { … }
bool AutocompleteTable::UpdateAutocompleteEntries(
const std::vector<AutocompleteEntry>& entries) { … }
bool AutocompleteTable::AddFormFieldValueTime(
const FormFieldData& element,
base::Time time,
std::vector<AutocompleteChange>* changes) { … }
bool AutocompleteTable::InsertAutocompleteEntry(
const AutocompleteEntry& entry) { … }
bool AutocompleteTable::InitMainTable() { … }
}