72 lines
2.2 KiB
C++
72 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include "sql/item.h"
|
|
|
|
#include "../coders/protocol_fwd.h"
|
|
|
|
#include "error.h"
|
|
#include "parse.h"
|
|
#include "meta.h"
|
|
|
|
namespace rpc_executor {
|
|
|
|
class ExprParser {
|
|
public:
|
|
static ExprParser &instance();
|
|
int parse(const ::Polarx::Expr::Expr &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse_field(const ::Polarx::Datatypes::Scalar &literal,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item,
|
|
const char *&field_name) const;
|
|
|
|
private:
|
|
enum OP_TYPE {
|
|
OP_PLUS,
|
|
OP_GT,
|
|
OP_GE,
|
|
OP_EQ
|
|
};
|
|
|
|
int parse(const ::Polarx::Expr::Identifier &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item,
|
|
const bool is_function = false) const;
|
|
int parse(const ::Polarx::Expr::ColumnIdentifier &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse(const ::Polarx::Expr::FunctionCall &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse(const ::Polarx::Expr::Operator &op,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse(const ::Polarx::Datatypes::Any &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse(const ::Polarx::Datatypes::Scalar &literal,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse(const ::Polarx::Datatypes::Scalar::Octets &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse_placeholder(const Placeholder &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse(const ::Polarx::Expr::Object &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse(const ::Polarx::Expr::Object::ObjectField &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse(const ::Polarx::Expr::Array &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
int parse_fieldref(const FieldIndex &arg,
|
|
InternalDataSet &dataset,
|
|
ExprItem *&item) const;
|
|
};
|
|
|
|
} // namespace executor
|