mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-02-12 14:48:30 -06:00
grammar: Add support for parsing CREATE INDEX statements
This commit adds support for CREATE INDEX statements to our grammar parser. The new parser is called for each index when reloading the database schema. However, the resulting index representation isn't used yet. Also note that this duplicates some code, though not much. The idea is to consolidate this later in a way that includes triggers and views as well.
This commit is contained in:
@@ -267,8 +267,9 @@ QStringList fieldVectorToFieldNames(const sqlb::FieldVector& vector);
|
||||
class IndexedColumn
|
||||
{
|
||||
public:
|
||||
IndexedColumn(const QString& name, const QString& order = QString())
|
||||
IndexedColumn(const QString& name, bool expr, const QString& order = QString())
|
||||
: m_name(name),
|
||||
m_isExpression(expr),
|
||||
m_order(order)
|
||||
{
|
||||
}
|
||||
@@ -276,6 +277,9 @@ public:
|
||||
void setName(const QString& name) { m_name = name; }
|
||||
QString name() const { return m_name; }
|
||||
|
||||
void setExpression(bool expr) { m_isExpression = expr; }
|
||||
bool expression() const { return m_isExpression; }
|
||||
|
||||
void setOrder(const QString& order) { m_order = order; }
|
||||
QString order() const { return m_order; }
|
||||
|
||||
@@ -283,6 +287,7 @@ public:
|
||||
|
||||
private:
|
||||
QString m_name;
|
||||
bool m_isExpression;
|
||||
QString m_order;
|
||||
};
|
||||
|
||||
@@ -322,6 +327,15 @@ public:
|
||||
*/
|
||||
QString sql() const;
|
||||
|
||||
/**
|
||||
* @brief parseSQL Parses the CREATE INDEX statement in sSQL.
|
||||
* @param sSQL The create index statement.
|
||||
* @return A pair. The first part is an index object, the second a bool indicating
|
||||
* if our parser fully understood the statement.
|
||||
* The index object may be if parsing failed.
|
||||
*/
|
||||
static QPair<Index, bool> parseSQL(const QString& sSQL);
|
||||
|
||||
private:
|
||||
QString m_name;
|
||||
bool m_unique;
|
||||
@@ -330,6 +344,30 @@ private:
|
||||
IndexedColumnVector m_columns;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief The CreateIndexWalker class
|
||||
* Goes trough the createtable AST and returns
|
||||
* Index object.
|
||||
*/
|
||||
class CreateIndexWalker
|
||||
{
|
||||
public:
|
||||
explicit CreateIndexWalker(antlr::RefAST r)
|
||||
: m_root(r)
|
||||
, m_bModifySupported(true)
|
||||
{}
|
||||
|
||||
Index index();
|
||||
bool modifysupported() const { return m_bModifySupported; }
|
||||
|
||||
private:
|
||||
void parsecolumn(Index& index, antlr::RefAST c);
|
||||
|
||||
private:
|
||||
antlr::RefAST m_root;
|
||||
bool m_bModifySupported;
|
||||
};
|
||||
|
||||
} //namespace sqlb
|
||||
|
||||
#endif // SQLITETYPES_H
|
||||
|
||||
Reference in New Issue
Block a user