mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-27 03:45:11 +00:00
In preparation of the relaxation of the grammar to return any expression, change the whereClause production to return an expression rather than terms. Note that the expression is still constrained to be a conjunction of relations, and our filtering code isn't prepared for more. Before the patch, if the WHERE clause was optional, the grammar would pass an empty vector of expressions (which is exactly correct). After the patch, it would pass a default-constructed expression. Now that happens to be an empty conjunction, which is exactly what's needed, but it is too accidental, so the patch changes optional WHERE clauses to explicitly generate an empty conjunction if the WHERE clause wasn't specified.
60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
/*
|
|
* Copyright (C) 2015-present ScyllaDB
|
|
*
|
|
* Modified by ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: (AGPL-3.0-or-later and Apache-2.0)
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "cql3/statements/raw/modification_statement.hh"
|
|
#include "cql3/column_identifier.hh"
|
|
#include "cql3/operation.hh"
|
|
|
|
#include "data_dictionary/data_dictionary.hh"
|
|
|
|
#include <vector>
|
|
|
|
namespace cql3 {
|
|
|
|
namespace statements {
|
|
|
|
class update_statement;
|
|
class modification_statement;
|
|
|
|
namespace raw {
|
|
|
|
class update_statement : public raw::modification_statement {
|
|
private:
|
|
// Provided for an UPDATE
|
|
std::vector<std::pair<::shared_ptr<column_identifier::raw>, std::unique_ptr<operation::raw_update>>> _updates;
|
|
expr::expression _where_clause;
|
|
public:
|
|
/**
|
|
* Creates a new UpdateStatement from a column family name, columns map, consistency
|
|
* level, and key expression.
|
|
*
|
|
* @param name column family being operated on
|
|
* @param attrs additional attributes for statement (timestamp, timeToLive)
|
|
* @param updates a map of column operations to perform
|
|
* @param whereClause the where clause
|
|
*/
|
|
update_statement(cf_name name,
|
|
std::unique_ptr<attributes::raw> attrs,
|
|
std::vector<std::pair<::shared_ptr<column_identifier::raw>, std::unique_ptr<operation::raw_update>>> updates,
|
|
expr::expression where_clause,
|
|
conditions_vector conditions, bool if_exists);
|
|
protected:
|
|
virtual ::shared_ptr<cql3::statements::modification_statement> prepare_internal(data_dictionary::database db, schema_ptr schema,
|
|
prepare_context& ctx, std::unique_ptr<attributes> attrs, cql_stats& stats) const override;
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|