aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio/parser/ast
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/parser/ast')
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecolumntype.cpp4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp20
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.h2
3 files changed, 23 insertions, 3 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecolumntype.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecolumntype.cpp
index cc773bb..2c48119 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecolumntype.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecolumntype.cpp
@@ -60,7 +60,7 @@ TokenList SqliteColumnType::rebuildTokensFromContents()
else if (scale.userType() == QVariant::LongLong)
builder.withInteger(scale.toLongLong());
else if (scale.userType() == QVariant::Double)
- builder.withFloat(scale.toDouble());
+ builder.withFloat(scale);
else
builder.withOther(scale.toString());
@@ -72,7 +72,7 @@ TokenList SqliteColumnType::rebuildTokensFromContents()
else if (precision.userType() == QVariant::LongLong)
builder.withInteger(precision.toLongLong());
else if (precision.userType() == QVariant::Double)
- builder.withFloat(precision.toDouble());
+ builder.withFloat(precision);
else
builder.withOther(precision.toString());
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp
index 3009b4b..5dc830b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp
@@ -124,6 +124,21 @@ void SqliteExpr::initSubExpr(SqliteExpr *expr)
expr->setParent(this);
}
+void SqliteExpr::initRowValue(const QList<SqliteExpr*> &exprList)
+{
+ if (exprList.size() == 1)
+ {
+ initSubExpr(exprList.first());
+ return;
+ }
+
+ mode = SqliteExpr::Mode::ROW_VALUE;
+ this->exprList = exprList;
+
+ for (SqliteExpr* expr : exprList)
+ expr->setParent(this);
+}
+
void SqliteExpr::initBindParam(const QString& value)
{
mode = SqliteExpr::Mode::BIND_PARAM;
@@ -158,7 +173,7 @@ void SqliteExpr::initFunction(const QString& fnName, int distinct, const QList<S
else if (distinct == 2)
allKw = true;
- foreach (SqliteExpr* expr, exprList)
+ for (SqliteExpr* expr : exprList)
expr->setParent(this);
}
@@ -496,6 +511,9 @@ TokenList SqliteExpr::rebuildTokensFromContents()
case SqliteExpr::Mode::IN:
builder.withTokens(rebuildIn());
break;
+ case SqliteExpr::Mode::ROW_VALUE:
+ builder.withParLeft().withStatementList(exprList).withParRight();
+ break;
case SqliteExpr::Mode::EXISTS:
builder.withKeyword("EXISTS").withParLeft().withStatement(select).withParRight();
break;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.h
index f57004f..4d5bb03 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.h
@@ -24,6 +24,7 @@ class API_EXPORT SqliteExpr : public SqliteStatement
BINARY_OP,
FUNCTION,
SUB_EXPR,
+ ROW_VALUE,
CAST,
COLLATE, // in Sqlite2 exists only in expr of sortlist
LIKE,
@@ -69,6 +70,7 @@ class API_EXPORT SqliteExpr : public SqliteStatement
void initNull();
void initCTime(const QString& name);
void initSubExpr(SqliteExpr* expr);
+ void initRowValue(const QList<SqliteExpr*>& exprList);
void initId(const QString& db, const QString& table, const QString& column);
void initId(const QString& table, const QString& column);
void initId(const QString& column);