criteria progress

This commit is contained in:
Sascha Kühl
2026-01-22 11:38:02 +01:00
parent 328d164c05
commit b331ef6923
29 changed files with 223 additions and 32 deletions
+53
View File
@@ -164,5 +164,58 @@ int main() {
in( iPT.payload_id, query::query::select({ temp_id_col }).from( temporary ) )
)
.str( conn->dialect() );
// const QString statement = QString( "SELECT %5 FROM %1 "
// "LEFT JOIN (SELECT %2, MAX(%3) AS lastSuccessfulLogin FROM %1 WHERE %4 = ? GROUP BY %2) ll "
// "ON %1.%2 = ll.%2 "
// "WHERE (lastSuccessfulLogin IS NULL OR %3 <= lastSuccessfulLogin) AND %3 < ?" )
// .arg( LoginHistory::staticSqlMetaInfo().tableName() )
// .arg( LoginHistory::staticSqlMetaInfo().columnName( LoginHistory::Attributes::userAttributeId() ) )
// .arg( LoginHistory::staticSqlMetaInfo().columnName( LoginHistory::Attributes::timestampAttributeId() ) )
// .arg( LoginHistory::staticSqlMetaInfo().columnName( LoginHistory::Attributes::failReasonSqlAttributeId() ) )
// .arg( LoginHistory::staticSqlMetaInfo().columnName( LoginHistory::Attributes::idAttributeId() ) );
const auto q = query::query::select({LOGIN_HISTORY.client, query::max(LOGIN_HISTORY.login_time).as( "lastSuccessfulLogin" ) } )
.from( LOGIN_HISTORY )
.where( LOGIN_HISTORY.fail_reason == _ )
.group_by( LOGIN_HISTORY.client );
// .as_table("ll");
const auto stmt3 = query::query::select({ LOGIN_HISTORY.client })
.from( LOGIN_HISTORY )
.join_left(q/*, "ll"*/ )
.on( LOGIN_HISTORY.client == "ll.client" )
.where( query::is_null("lastSuccessfulLogin") && LOGIN_HISTORY.login_time < "ll.lastSuccessfulLogin" )
.str( conn->dialect() );
std::cout << stmt1 << std::endl;
std::cout << stmt2 << std::endl;
std::cout << stmt3 << std::endl;
// const QString subQuery = QString( "SELECT MAX(%1) AS lastSuccessfulLogin, %3 FROM %2 "
// "WHERE(%4 = ? OR %4 = ? OR %4 = ?) AND %3 = ? GROUP BY %3 " );
//
// const QString statement = QString( "SELECT MAX(t1.%1) AS LAST_FAILED_LOGIN FROM %2 t1 LEFT JOIN"
// "(%0) t2 "
// "ON t1.%3 = t2.%3 "
// "WHERE(t2.lastSuccessfulLogin IS NULL OR t2.lastSuccessfulLogin < t1.%1) "
// "AND (t1.%4 = ? OR t1.%4 = ?) "
// "AND t1.%3 = ?" )
// .arg( subQuery )
// .arg( LoginHistory::staticSqlMetaInfo().columnName( LoginHistory::Attributes::timestampAttributeId() ) )
// .arg( LoginHistory::staticSqlMetaInfo().tableName() )
// .arg( columnFilterName )
// .arg( LoginHistory::staticSqlMetaInfo().columnName( LoginHistory::Attributes::failReasonSqlAttributeId() ) );
//
// QSqlQuery query( sqlDatabase() );
// if ( query.prepare( statement ) ) {
// query.addBindValue( LoginHistory::FailReason::NoFailReason );
// query.addBindValue( LoginHistory::FailReason::NoScenarioForUser );
// query.addBindValue( LoginHistory::FailReason::UserLockedByAdmin );
// query.addBindValue( columnFilterValue );
// query.addBindValue( LoginHistory::FailReason::WrongPassword );
// query.addBindValue( LoginHistory::FailReason::UnknownUserName );
// query.addBindValue( columnFilterValue );
return 0;
}
+5
View File
@@ -9,6 +9,8 @@
#include "matador/object/object_ptr.hpp"
#include "matador/query/meta_table_macro.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/enum_mapper.hpp"
#include "matador/utils/foreign_attributes.hpp"
@@ -59,6 +61,9 @@ struct LoginHistory : core::Model {
field::attribute( op, "login_time", login_time );
}
};
}
META_TABLE( login_histories, LOGIN_HISTORY, id, version, client, scenario, collection_center, login_name, fail_reason, login_time )
#endif //LOGIN_HISTORY_HPP
+5
View File
@@ -7,6 +7,8 @@
#include "matador/object/object_ptr.hpp"
#include "matador/query/meta_table_macro.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/foreign_attributes.hpp"
#include "matador/utils/types.hpp"
@@ -42,4 +44,7 @@ struct User : core::Model {
};
}
META_TABLE(users, USER, id, version, name, symbol, salt, password, lock_type, locked_at, lock_reason, role, user_directory)
#endif //USER_HPP