- Code: Select all
CREATE TABLE user_system
(
id bigserial NOT NULL,
role_id bigint NOT NULL,
status_id integer NOT NULL,
username character varying(20) NOT NULL,
passwd character varying(32) NOT NULL,
address character varying(255) NOT NULL,
firstname character varying(50) NOT NULL,
lastname character varying(50) NOT NULL,
patronymic character varying(50),
phone_id bigint NOT NULL,
CONSTRAINT user_system_pkey PRIMARY KEY (id ),
CONSTRAINT fk_user_system_phone_id FOREIGN KEY (phone_id)
REFERENCES phone (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT user_system_status_id_fkey FOREIGN KEY (status_id)
REFERENCES user_system_status (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT user_system_username_key UNIQUE (username )
)
WITH (
OIDS=FALSE
);
CREATE TABLE user_system_manager
(
-- Inrehit from table user_system: id bigint NOT NULL DEFAULT nextval('user_system_id_seq'::regclass),
-- Inrehit from table user_system: role_id bigint NOT NULL,
-- Inrehit from table user_system: status_id integer NOT NULL,
-- Inrehit from table user_system: username character varying(20) NOT NULL,
-- Inrehit from table user_system: passwd character varying(32) NOT NULL,
-- Inrehit from table user_system: address character varying(255) NOT NULL,
-- Inrehit from table user_system: firstname character varying(50) NOT NULL,
-- Inrehit from table user_system: lastname character varying(50) NOT NULL,
-- Inrehit from table user_system: patronymic character varying(50),
-- Inrehit from table user_system: phone_id bigint NOT NULL,
CONSTRAINT user_system_manager_pkey PRIMARY KEY (id ),
CONSTRAINT user_system_manager_phone FOREIGN KEY (phone_id)
REFERENCES phone (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT user_system_manager_role FOREIGN KEY (role_id)
REFERENCES user_role (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT user_system_manager_status FOREIGN KEY (status_id)
REFERENCES user_system_status (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT user_system_manager_username_key UNIQUE (username )
)
INHERITS (user_system)
WITH (
OIDS=FALSE
);
I created User and UserManager business classes.
User class:
- Code: Select all
#ifndef _QX_SERVICE_BO_USER_H_
#define _QX_SERVICE_BO_USER_H_
#include "phone.h"
#include "userrole.h"
#include "userstatus.h"
class QX_SERVICE_DLL_EXPORT User
{
QX_REGISTER_FRIEND_CLASS(User)
public:
User() : m_Id(0) { ; }
virtual ~User() { ; }
long id() const { return m_Id; }
QString firstname() const { return m_Firstname; }
QString lastname() const { return m_Lastname; }
QString patronymic() const { return m_Patronymic; }
QString address() const { return m_Address; }
QString username() const { return m_Username; }
QString password() const { return m_Password; }
void setId(const long id) { m_Id = id; }
void setFirstname(const QString value) { m_Firstname = value; }
void setLastname(const QString value) { m_Lastname = value; }
void setPatronymic(const QString value) { m_Patronymic = value; }
void setAddress(const QString value) { m_Address = value; }
void setUsername(const QString value) { m_Username = value; }
void setPassword(const QString value) { m_Password = value; }
protected:
long m_Id;
long m_RoleId;
long m_StatusId;
QString m_Firstname;
QString m_Lastname;
QString m_Patronymic;
QString m_Address;
QString m_Username;
QString m_Password;
PhonePtr m_Phone;
UserRolePtr m_Role;
UserStatusPtr m_Status;
};
QX_REGISTER_HPP_QX_SERVICE(User, qx::trait::no_base_class_defined, 0)
typedef boost::shared_ptr<User> UserPtr;
typedef qx::QxCollection<long, UserPtr> UserList;
typedef boost::shared_ptr<UserList> UserListPtr;
#endif // _QX_SERVICE_BO_USER_H_
/// CPP
#include "../../include/precompiled.h"
#include "../../include/business_object/user.h"
#include <QxMemLeak.h>
QX_REGISTER_CPP_QX_SERVICE(User)
namespace qx {
template <> void register_class(QxClass<User> & t)
{
t.setName("user_system");
t.id(& User::m_Id, "id");
t.data(& User::m_Firstname, "first_name");
t.data(& User::m_Lastname, "last_name");
t.data(& User::m_Patronymic, "patronymic");
t.data(& User::m_Address, "patronymic");
t.data(& User::m_Username, "username");
t.data(& User::m_Password, "passwd");
}
}
User manager class:
- Code: Select all
#ifndef USERMANAGER_H
#define USERMANAGER_H
#include "user.h"
class QX_SERVICE_DLL_EXPORT UserManager : public User
{
QX_REGISTER_FRIEND_CLASS(UserManager)
public:
UserManager() : User() { ; };
};
QX_REGISTER_HPP_QX_SERVICE(UserManager, User, 0)
typedef boost::shared_ptr<UserManager> UserManagerPtr;
typedef qx::QxCollection<long, UserManagerPtr> UserManagerList;
typedef boost::shared_ptr<UserManagerList> UserManagerListPtr;
#endif // USERMANAGER_H
#include "../../include/precompiled.h"
#include "../../include/business_object/usermanager.h"
#include <QxMemLeak.h>
QX_REGISTER_CPP_QX_SERVICE(UserManager)
namespace qx {
template <> void register_class(QxClass<UserManager> & t)
{
t.setName("user_system_manager");
qDebug() << "We registered UserManager";
}
}
I use this classes in this form:
- Code: Select all
bool UserManagerDao::authenticate(UserManagerPtr user, const QString serviceName, const QString serviceMethodName)
{
if (! user) {
qAssert(user);
return false;
}
qx::QxSqlQuery query("WHERE user_system.username = :username AND user_system.passwd = MD5(:password)");
query.bind(":username", user->username());
query.bind(":password", user->password());
qDebug() << "test test test test";
query.dumpSqlResult();
qx::dao::fetch_by_query(query, user);
/*
if (user.get().id() > 0) {
//qAssert(userManagerList.count() == 1);
return false;
}
*/
return true;
}
I got this error:
Server is running!
test test test test
[QxOrm] qx::QxSqlDatabase : create new database connection in thread '5316' with key '{5ddd1e02-b5de-4f44-b5b0-cd0c32cb4848}'
ASSERT: "false" in file d:\projects\qtaxi\qxorm\include\qxdatamember\../../inl/QxDataMember/QxDataMemberX.inl, line 69
ASSERT failure in QMutex::lock: "Internal error, infinite wait has timed out.", file thread\qmutex.cpp, line 166
Maybe i made mistake in QX_REGISTER_HPP_QX_SERVICE(UserManager, User, 0) this line? If i change this line to QX_REGISTER_HPP_QX_SERVICE(UserManager, qx::trait::no_base_class_defined, 0) error is not happened, but SQL Query looks like this:
Server is running!
test test test test
[QxOrm] qx::QxSqlDatabase : create new database connection in thread '3508' with key '{1e59ea12-155c-42f1-afba-4a519fff9189}'
We registered UserManager
[QxOrm] execute sql query failed : SELEC FROM user_system_manager WHERE user_system.username = :username AND user_system.passwd = MD5(:password)
QPSQL: Unable to create query
??????: ?????? ?????????? (????????? ?????????: "(")
LINE 1: EXECUTE ('kna', '123')
^
Can you help me to create inherited classes in QxOrm? I saw your example dll2 but can not find what is wrong.