Add new Index class and use in Create Index dialog

This adds a new class for indices, similar to the one for tables. This
class is supposed to make creating and editing indices a lot easier,
making all manual string concatenation unnecessary.

For now this is only used for simplifying the index creation procedure
in the Create Index dialog.
This commit is contained in:
Martin Kleusberg
2017-01-16 17:00:12 +01:00
parent 0c60b01770
commit 00e01080c9
3 changed files with 153 additions and 10 deletions

View File

@@ -17,9 +17,12 @@ QString escapeIdentifier(QString id);
class Field;
class Constraint;
class IndexedColumn;
typedef QSharedPointer<Field> FieldPtr;
typedef QSharedPointer<Constraint> ConstraintPtr;
typedef QVector<FieldPtr> FieldVector;
typedef QSharedPointer<IndexedColumn> IndexedColumnPtr;
typedef QVector<IndexedColumnPtr> IndexedColumnVector;
class Constraint
{
@@ -261,6 +264,71 @@ private:
QStringList fieldVectorToFieldNames(const sqlb::FieldVector& vector);
class IndexedColumn
{
public:
IndexedColumn(const QString& name, const QString& order = QString())
: m_name(name),
m_order(order)
{
}
void setName(const QString& name) { m_name = name; }
QString name() const { return m_name; }
void setOrder(const QString& order) { m_order = order; }
QString order() const { return m_order; }
QString toString(const QString& indent = "\t", const QString& sep = "\t") const;
private:
QString m_name;
QString m_order;
};
class Index
{
public:
explicit Index(const QString& name): m_name(name), m_unique(false) {}
virtual ~Index();
void setName(const QString& name) { m_name = name; }
const QString& name() const { return m_name; }
void setUnique(bool unique) { m_unique = unique; }
bool unique() const { return m_unique; }
void setTable(const QString& table) { m_table = table; }
const QString& table() const { return m_table; }
void setWhereExpr(const QString& expr) { m_whereExpr = expr; }
const QString& whereExpr() const { return m_whereExpr; }
void setColumns(const IndexedColumnVector& columns);
const IndexedColumnVector& columns() const { return m_columns; }
void addColumn(const IndexedColumnPtr& c) { m_columns.append(c); }
bool removeColumn(const QString& name);
void setColumn(int index, IndexedColumnPtr c) { m_columns[index] = c; }
const IndexedColumnPtr& column(int index) const { return m_columns[index]; }
int findColumn(const QString& name) const;
QStringList columnSqlList() const;
void clear();
/**
* @brief Returns the CREATE INDEX statement for this index object
* @return A QString with the CREATE INDEX object.
*/
QString sql() const;
private:
QString m_name;
bool m_unique;
QString m_table;
QString m_whereExpr;
IndexedColumnVector m_columns;
};
} //namespace sqlb
#endif // SQLITETYPES_H