mirror of
https://github.com/silverqx/TinyORM.git
synced 2026-05-12 12:28:57 -05:00
added test for mass assignment
Added auto test to test MySqlSchemaBuilder::getColumnListing() and SchemaBuilder::getColumnListing() and also GuardsAttributes::isGuardableColumn() (not all paths). - bugfix for SQLite get column listing
This commit is contained in:
@@ -16,6 +16,9 @@ namespace Orm::Query::Processors
|
||||
|
||||
public:
|
||||
MySqlProcessor() = default;
|
||||
|
||||
/*! Process the results of a column listing query. */
|
||||
QStringList processColumnListing(QSqlQuery &query) const override;
|
||||
};
|
||||
|
||||
} // namespace Orm::Query::Processors
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace Orm::Query::Processors
|
||||
inline virtual ~Processor() = default;
|
||||
|
||||
/*! Process the results of a column listing query. */
|
||||
QStringList processColumnListing(QSqlQuery &query) const;
|
||||
virtual QStringList processColumnListing(QSqlQuery &query) const;
|
||||
};
|
||||
|
||||
} // namespace Orm::Query::Processors
|
||||
|
||||
@@ -16,6 +16,9 @@ namespace Orm::Query::Processors
|
||||
|
||||
public:
|
||||
SQLiteProcessor() = default;
|
||||
|
||||
/*! Process the results of a column listing query. */
|
||||
QStringList processColumnListing(QSqlQuery &query) const override;
|
||||
};
|
||||
|
||||
} // namespace Orm::Query::Processors
|
||||
|
||||
@@ -1,11 +1,25 @@
|
||||
#include "orm/query/processors/mysqlprocessor.hpp"
|
||||
|
||||
#include <QtSql/QSqlQuery>
|
||||
#include <QVariant>
|
||||
|
||||
#ifdef TINYORM_COMMON_NAMESPACE
|
||||
namespace TINYORM_COMMON_NAMESPACE
|
||||
{
|
||||
#endif
|
||||
namespace Orm::Query::Processors
|
||||
{
|
||||
|
||||
QStringList MySqlProcessor::processColumnListing(QSqlQuery &query) const
|
||||
{
|
||||
QStringList columns;
|
||||
|
||||
while (query.next())
|
||||
columns.append(query.value("column_name").value<QString>());
|
||||
|
||||
return columns;
|
||||
}
|
||||
|
||||
} // namespace Orm::Query::Processors
|
||||
#ifdef TINYORM_COMMON_NAMESPACE
|
||||
} // namespace TINYORM_COMMON_NAMESPACE
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "orm/query/processors/processor.hpp"
|
||||
|
||||
#include <QtSql/QSqlQuery>
|
||||
#include <QVariant>
|
||||
#include "orm/runtimeerror.hpp"
|
||||
#include "orm/utils/type.hpp"
|
||||
|
||||
#ifdef TINYORM_COMMON_NAMESPACE
|
||||
namespace TINYORM_COMMON_NAMESPACE
|
||||
@@ -10,14 +10,10 @@ namespace TINYORM_COMMON_NAMESPACE
|
||||
namespace Orm::Query::Processors
|
||||
{
|
||||
|
||||
QStringList Processor::processColumnListing(QSqlQuery &query) const
|
||||
QStringList Processor::processColumnListing(QSqlQuery &) const
|
||||
{
|
||||
QStringList columns;
|
||||
|
||||
while (query.next())
|
||||
columns.append(query.value(0).value<QString>());
|
||||
|
||||
return columns;
|
||||
throw RuntimeError(QStringLiteral("Method %1() is not implemented.")
|
||||
.arg(__tiny_func__));
|
||||
}
|
||||
|
||||
} // namespace Orm::Query::Processors
|
||||
|
||||
@@ -1,11 +1,25 @@
|
||||
#include "orm/query/processors/sqliteprocessor.hpp"
|
||||
|
||||
#include <QtSql/QSqlQuery>
|
||||
#include <QVariant>
|
||||
|
||||
#ifdef TINYORM_COMMON_NAMESPACE
|
||||
namespace TINYORM_COMMON_NAMESPACE
|
||||
{
|
||||
#endif
|
||||
namespace Orm::Query::Processors
|
||||
{
|
||||
|
||||
QStringList SQLiteProcessor::processColumnListing(QSqlQuery &query) const
|
||||
{
|
||||
QStringList columns;
|
||||
|
||||
while (query.next())
|
||||
columns.append(query.value("name").value<QString>());
|
||||
|
||||
return columns;
|
||||
}
|
||||
|
||||
} // namespace Orm::Query::Processors
|
||||
#ifdef TINYORM_COMMON_NAMESPACE
|
||||
} // namespace TINYORM_COMMON_NAMESPACE
|
||||
|
||||
@@ -158,7 +158,6 @@ void Builder::truncate()
|
||||
m_connection.statement(sql, bindings);
|
||||
}
|
||||
|
||||
// CUR try with 'as' - select('name', 'email as user_email') and add tests silverqx
|
||||
Builder &Builder::select(const QStringList &columns)
|
||||
{
|
||||
// FEATURE expression, add Query::Expression overload, find all occurences of Illuminate\Database\Query\Expression in the Eloquent and add support to TinyORM, I will need to add overloads for some methods, for columns and also for values silverqx
|
||||
|
||||
@@ -9,7 +9,8 @@ namespace Orm::Schema::Grammars
|
||||
|
||||
QString MySqlSchemaGrammar::compileColumnListing(const QString &) const
|
||||
{
|
||||
return "select `column_name` from `information_schema`.`columns` "
|
||||
return "select `column_name` as `column_name` "
|
||||
"from `information_schema`.`columns` "
|
||||
"where `table_schema` = ? and `table_name` = ?";
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ private slots:
|
||||
|
||||
void truncate() const;
|
||||
|
||||
void massAssignment_NotGuardableColumn() const;
|
||||
void massAssignment_isGuardableColumn() const;
|
||||
};
|
||||
|
||||
void tst_Model::initTestCase_data() const
|
||||
@@ -1225,7 +1225,7 @@ void tst_Model::truncate() const
|
||||
QCOMPARE(Setting::all().size(), 0);
|
||||
}
|
||||
|
||||
void tst_Model::massAssignment_NotGuardableColumn() const
|
||||
void tst_Model::massAssignment_isGuardableColumn() const
|
||||
{
|
||||
/* This test has to be here because it internally calls columns listing against
|
||||
database, so it is connection-dependent. */
|
||||
@@ -1233,11 +1233,12 @@ void tst_Model::massAssignment_NotGuardableColumn() const
|
||||
|
||||
ConnectionOverride::connection = connection;
|
||||
|
||||
Torrent_GuardedAttribute torrent;
|
||||
Torrent_GuardableColumn torrent;
|
||||
|
||||
torrent.fill({{"dummy-NON_EXISTENT", "foo"}});
|
||||
torrent.fill({{"updated_at", QDateTime::currentDateTime()}});
|
||||
|
||||
QCOMPARE(torrent.getAttributes().size(), 0);
|
||||
QVERIFY(!torrent.exists);
|
||||
QCOMPARE(torrent.getAttributes().size(), 1);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_Model)
|
||||
|
||||
@@ -52,4 +52,17 @@ class Torrent_AllowedMassAssignment final :
|
||||
inline static QStringList u_guarded {}; // disabled
|
||||
};
|
||||
|
||||
class Torrent_GuardableColumn final :
|
||||
public Model<Torrent_GuardableColumn>
|
||||
{
|
||||
friend Model;
|
||||
using Model::Model;
|
||||
|
||||
/*! The table associated with the model. */
|
||||
QString u_table {"torrents"};
|
||||
|
||||
/*! The attributes that aren't mass assignable. */
|
||||
inline static QStringList u_guarded {"xyz"};
|
||||
};
|
||||
|
||||
#endif // MASSASSIGNMENTMODELS_HPP
|
||||
|
||||
Reference in New Issue
Block a user