17#ifndef QGSSQLSTATEMENT_H 
   18#define QGSSQLSTATEMENT_H 
   22#include <QCoreApplication> 
   52    bool hasParserError() 
const;
 
 
   54    QString parserErrorString() 
const;
 
   61    bool doBasicValidationChecks( QString &errorMsgOut 
SIP_OUT ) 
const;
 
   76    QString statement() 
const;
 
   91    static QString quotedIdentifier( QString name );
 
   99    static QString quotedIdentifierIfNeeded( 
const QString &name );
 
  105    static QString stripQuotedIdentifier( QString text );
 
  111    static QString stripMsQuotedIdentifier( QString text );
 
  118    static QString quotedString( QString text );
 
  184    static const char *BINARY_OPERATOR_TEXT[] 
SIP_SKIP;
 
  187    static const char *UNARY_OPERATOR_TEXT[] 
SIP_SKIP;
 
  190    static const char *JOIN_TYPE_TEXT[] 
SIP_SKIP;
 
  223        switch ( sipCpp->nodeType() )
 
  238          default:                               sipType = 0; 
break;
 
  258        virtual QString 
dump() 
const = 0;
 
 
  303        QList<QgsSQLStatement::Node *> 
list() { 
return mList; }
 
  308        int count()
 const { 
return mList.count(); }
 
  317        virtual QString dump() const;
 
 
  340        QString dump() 
const override;
 
 
  370          , mOpRight( opRight )
 
 
  383        QString dump() 
const override;
 
  389        int precedence() const;
 
  392        bool leftAssociative() const;
 
 
  430        QString dump() 
const override;
 
 
  459          : mNode( node ), mMinVal( minVal ), mMaxVal( maxVal ), mNotBetween( notBetween ) {}
 
 
  474        QString dump() 
const override;
 
 
  506        QString 
name()
 const { 
return mName; }
 
  512        QString dump() 
const override;
 
 
  543        inline QVariant 
value()
 const { 
return mValue; }
 
  546        QString dump() 
const override;
 
 
  563        NodeColumnRef( 
const QString &name, 
bool star ) : mName( name ), mDistinct( false ), mStar( star ) {}
 
  565        NodeColumnRef( 
const QString &tableName, 
const QString &name, 
bool star ) : mTableName( tableName ), mName( name ), mDistinct( false ), mStar( star ) {}
 
  568        void setDistinct( 
bool distinct = 
true ) { mDistinct = distinct; }
 
  574        QString 
name()
 const { 
return mName; }
 
  577        bool star()
 const { 
return mStar; }
 
  583        QString dump() 
const override;
 
 
  608        void setAlias( 
const QString &alias ) { mAlias = alias; }
 
  614        QString 
alias()
 const { 
return mAlias; }
 
  617        QString dump() 
const override;
 
 
  652        QString 
type()
 const { 
return mType; }
 
  655        QString dump() 
const override;
 
 
  684        NodeTableDef( 
const QString &name, 
const QString &alias ) : mName( name ), mAlias( alias ) {}
 
  690        NodeTableDef( 
const QString &schema, 
const QString &name, 
const QString &alias ) : mName( name ), mSchema( schema ), mAlias( alias ) {}
 
  693        QString 
name()
 const { 
return mName; }
 
  700        QString 
schema()
 const { 
return mSchema; }
 
  703        QString 
alias()
 const { 
return mAlias; }
 
  706        QString dump() 
const override;
 
 
  744        QString dump() 
const override;
 
 
  784        QString dump() 
const override;
 
 
  813        NodeSelect( 
const QList<QgsSQLStatement::NodeTableDef *> &tableList 
SIP_TRANSFER, 
const QList<QgsSQLStatement::NodeSelectedColumn *> &columns 
SIP_TRANSFER, 
bool distinct ) : mTableList( tableList ), mColumns( columns ), mDistinct( distinct ) {}
 
  817        void setJoins( 
const QList<QgsSQLStatement::NodeJoin *> &joins 
SIP_TRANSFER ) { qDeleteAll( mJoins ); mJoins = joins; }
 
  823        void setOrderBy( 
const QList<QgsSQLStatement::NodeColumnSorted *> &orderBy 
SIP_TRANSFER ) { qDeleteAll( mOrderBy ); mOrderBy = orderBy; }
 
  826        QList<QgsSQLStatement::NodeTableDef *> 
tables()
 const { 
return mTableList; }
 
  828        QList<QgsSQLStatement::NodeSelectedColumn *> 
columns()
 const { 
return mColumns; }
 
  832        QList<QgsSQLStatement::NodeJoin *> 
joins()
 const { 
return mJoins; }
 
  836        QList<QgsSQLStatement::NodeColumnSorted *> 
orderBy()
 const { 
return mOrderBy; }
 
  839        QString dump() 
const override;
 
 
  931    bool mAllowFragments = 
false;
 
 
Parses fragments of SQL statements, such as an expression or where clause.
 
An 'X BETWEEN y and z' operator.
 
std::unique_ptr< Node > mMaxVal
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
QgsSQLStatement::Node * node() const
Variable at the left of BETWEEN.
 
QgsSQLStatement::Node * minVal() const
Minimum bound.
 
bool isNotBetween() const
Whether this is a NOT BETWEEN operator.
 
std::unique_ptr< Node > mNode
 
QgsSQLStatement::Node * maxVal() const
Maximum bound.
 
std::unique_ptr< Node > mMinVal
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
NodeBetweenOperator(QgsSQLStatement::Node *node, QgsSQLStatement::Node *minVal, QgsSQLStatement::Node *maxVal, bool notBetween=false)
Constructor.
 
Binary logical/arithmetical operator (AND, OR, =, +, ...).
 
std::unique_ptr< Node > mOpLeft
 
QgsSQLStatement::Node * opLeft() const
Left operand.
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
NodeBinaryOperator(QgsSQLStatement::BinaryOperator op, QgsSQLStatement::Node *opLeft, QgsSQLStatement::Node *opRight)
Constructor.
 
std::unique_ptr< Node > mOpRight
 
QgsSQLStatement::BinaryOperator op() const
Operator.
 
QgsSQLStatement::Node * opRight() const
Right operand.
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
QgsSQLStatement::Node * node() const
Node that is referred to.
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
NodeCast(QgsSQLStatement::Node *node, const QString &type)
Constructor.
 
QString type() const
Type.
 
std::unique_ptr< Node > mNode
 
QString name() const
The name of the column.
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
NodeColumnRef(const QString &name, bool star)
Constructor with column name only.
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
bool star() const
Whether this is the * column.
 
NodeColumnRef(const QString &tableName, const QString &name, bool star)
Constructor with table and column name.
 
QString tableName() const
The name of the table. May be empty.
 
void setDistinct(bool distinct=true)
Sets whether this is prefixed by DISTINCT.
 
bool distinct() const
Whether this is prefixed by DISTINCT.
 
bool ascending() const
Whether the column is sorted in ascending order.
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
std::unique_ptr< NodeColumnRef > mColumn
 
QgsSQLStatement::NodeColumnRef * column() const
The name of the column.
 
NodeColumnSorted(QgsSQLStatement::NodeColumnRef *column, bool asc)
Constructor.
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
Function with a name and arguments node.
 
NodeFunction(const QString &name, QgsSQLStatement::NodeList *args)
Constructor.
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
std::unique_ptr< NodeList > mArgs
 
QgsSQLStatement::NodeList * args() const
Returns arguments.
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
QString name() const
Returns function name.
 
An 'x IN (y, z)' operator.
 
std::unique_ptr< NodeList > mList
 
bool isNotIn() const
Whether this is a NOT IN operator.
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
QgsSQLStatement::Node * node() const
Variable at the left of IN.
 
std::unique_ptr< Node > mNode
 
NodeInOperator(QgsSQLStatement::Node *node, QgsSQLStatement::NodeList *list, bool notin=false)
Constructor.
 
QgsSQLStatement::NodeList * list() const
Values list.
 
QList< QString > mUsingColumns
 
QgsSQLStatement::NodeTableDef * tableDef() const
Table definition.
 
std::unique_ptr< Node > mOnExpr
 
QgsSQLStatement::Node * onExpr() const
On expression. Will be nullptr if usingColumns() is not empty.
 
NodeJoin(QgsSQLStatement::NodeTableDef *tabledef, QgsSQLStatement::Node *onExpr, QgsSQLStatement::JoinType type)
Constructor with table definition, ON expression.
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
std::unique_ptr< NodeTableDef > mTableDef
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
NodeJoin(QgsSQLStatement::NodeTableDef *tabledef, const QList< QString > &usingColumns, QgsSQLStatement::JoinType type)
Constructor with table definition and USING columns.
 
QList< QString > usingColumns() const
Columns referenced by USING.
 
QgsSQLStatement::JoinType type() const
Join type.
 
void accept(QgsSQLStatement::Visitor &v) const
Accept visitor.
 
QList< QgsSQLStatement::Node * > list()
Returns list.
 
int count() const
Returns the number of nodes in the list.
 
void append(QgsSQLStatement::Node *node)
Takes ownership of the provided node.
 
Literal value (integer, integer64, double, string).
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
NodeLiteral(const QVariant &value)
Constructor.
 
QVariant value() const
The value of the literal.
 
NodeSelect(const QList< QgsSQLStatement::NodeTableDef * > &tableList, const QList< QgsSQLStatement::NodeSelectedColumn * > &columns, bool distinct)
Constructor.
 
QList< QgsSQLStatement::NodeColumnSorted * > orderBy() const
Returns the list of order by columns.
 
void setJoins(const QList< QgsSQLStatement::NodeJoin * > &joins)
Sets joins.
 
void setWhere(QgsSQLStatement::Node *where)
Sets where clause.
 
QList< NodeColumnSorted * > mOrderBy
 
QList< QgsSQLStatement::NodeSelectedColumn * > columns() const
Returns the list of columns.
 
bool distinct() const
Returns if the SELECT is DISTINCT.
 
QList< NodeSelectedColumn * > mColumns
 
void appendJoin(QgsSQLStatement::NodeJoin *join)
Append a join.
 
void setOrderBy(const QList< QgsSQLStatement::NodeColumnSorted * > &orderBy)
Sets order by columns.
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
std::unique_ptr< Node > mWhere
 
QList< QgsSQLStatement::NodeJoin * > joins() const
Returns the list of joins.
 
QList< NodeJoin * > mJoins
 
QList< NodeTableDef * > mTableList
 
QgsSQLStatement::Node * where() const
Returns the where clause.
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
QList< QgsSQLStatement::NodeTableDef * > tables() const
Returns the list of tables.
 
NodeSelectedColumn(QgsSQLStatement::Node *node)
Constructor.
 
void setAlias(const QString &alias)
Sets alias name.
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
QgsSQLStatement::Node * column() const
Column that is referred to.
 
QString alias() const
Alias name.
 
std::unique_ptr< Node > mColumnNode
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
QString name() const
Table name.
 
NodeTableDef(const QString &schema, const QString &name, const QString &alias)
Constructor with schema, table name and alias.
 
NodeTableDef(const QString &name)
Constructor with table name.
 
NodeTableDef(const QString &name, const QString &alias)
Constructor with table name and alias.
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
QString alias() const
Table alias.
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
QString schema() const
Returns the schema name.
 
Unary logical/arithmetical operator ( NOT, - ).
 
NodeUnaryOperator(QgsSQLStatement::UnaryOperator op, QgsSQLStatement::Node *operand)
Constructor.
 
std::unique_ptr< Node > mOperand
 
void accept(QgsSQLStatement::Visitor &v) const override
Support the visitor pattern.
 
QgsSQLStatement::UnaryOperator op() const
Operator.
 
QgsSQLStatement::Node * operand() const
Operand.
 
QgsSQLStatement::NodeType nodeType() const override
Abstract virtual that returns the type of this node.
 
Abstract node class for SQL statement nodes.
 
virtual QgsSQLStatement::Node * clone() const =0
Generate a clone of this node.
 
virtual QString dump() const =0
Abstract virtual dump method.
 
virtual QgsSQLStatement::NodeType nodeType() const =0
Abstract virtual that returns the type of this node.
 
virtual void accept(QgsSQLStatement::Visitor &v) const =0
Support the visitor pattern.
 
A visitor that recursively explores all children.
 
void visit(const QgsSQLStatement::NodeFunction &n) override
Visit NodeFunction.
 
void visit(const QgsSQLStatement::NodeSelectedColumn &n) override
Visit NodeSelectedColumn.
 
void visit(const QgsSQLStatement::NodeUnaryOperator &n) override
Visit NodeUnaryOperator.
 
void visit(const QgsSQLStatement::NodeLiteral &) override
Visit NodeLiteral.
 
RecursiveVisitor()=default
 
void visit(const QgsSQLStatement::NodeBetweenOperator &n) override
Visit NodeBetweenOperator.
 
void visit(const QgsSQLStatement::NodeBinaryOperator &n) override
Visit NodeBinaryOperator.
 
void visit(const QgsSQLStatement::NodeColumnRef &) override
Visit NodeColumnRef.
 
void visit(const QgsSQLStatement::NodeTableDef &) override
Visit NodeTableDef.
 
void visit(const QgsSQLStatement::NodeColumnSorted &n) override
Visit NodeColumnSorted.
 
void visit(const QgsSQLStatement::NodeInOperator &n) override
Visit NodeInOperator.
 
void visit(const QgsSQLStatement::NodeCast &n) override
Visit NodeCast.
 
Support for visitor pattern - algorithms dealing with the statement may be implemented without modify...
 
virtual void visit(const QgsSQLStatement::NodeBetweenOperator &n)=0
Visit NodeBetweenOperator.
 
virtual ~Visitor()=default
 
virtual void visit(const QgsSQLStatement::NodeFunction &n)=0
Visit NodeFunction.
 
virtual void visit(const QgsSQLStatement::NodeColumnRef &n)=0
Visit NodeColumnRef.
 
virtual void visit(const QgsSQLStatement::NodeBinaryOperator &n)=0
Visit NodeBinaryOperator.
 
virtual void visit(const QgsSQLStatement::NodeSelect &n)=0
Visit NodeSelect.
 
virtual void visit(const QgsSQLStatement::NodeCast &n)=0
Visit NodeCast.
 
virtual void visit(const QgsSQLStatement::NodeSelectedColumn &n)=0
Visit NodeSelectedColumn.
 
virtual void visit(const QgsSQLStatement::NodeJoin &n)=0
Visit NodeJoin.
 
virtual void visit(const QgsSQLStatement::NodeUnaryOperator &n)=0
Visit NodeUnaryOperator.
 
virtual void visit(const QgsSQLStatement::NodeInOperator &n)=0
Visit NodeInOperator.
 
virtual void visit(const QgsSQLStatement::NodeLiteral &n)=0
Visit NodeLiteral.
 
virtual void visit(const QgsSQLStatement::NodeColumnSorted &n)=0
Visit NodeColumnSorted.
 
virtual void visit(const QgsSQLStatement::NodeTableDef &n)=0
Visit NodeTableDef.
 
JoinType
list of join types
 
BinaryOperator
list of binary operators
 
QString mParserErrorString
 
std::unique_ptr< QgsSQLStatement::Node > mRootNode
 
UnaryOperator
list of unary operators
 
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
 
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)