ã¯ããã«
ããã«ã¡ã¯ãããã°ã©ããŒã®çããïŒ
Qtã®äžçã§ã¯ããã1幎éãéåžžã«èå³æ·±ãã€ãã³ããéå¬ãããŠããŸãã ããã«ã¯ãããŒãžã§ã³4.7ã®ææ°ãªãªãŒã¹ãQMLã®æŠå¿µãããã³ã¢ãã€ã«ãã©ãããã©ãŒã ãžã®ã©ã€ãã©ãªã®éèŠãªçµ±åããããŸãã Qtã«ã¯æãæ£ãããããŒã«ããããŸãã ç§ã¯åœŒããäœãããŠããŠããã®ã©ã€ãã©ãªãã©ãã§éçºãããŠãããã奜ãã§ãã ç§ã¯åœŒå¥³ã圌女ã®ã¯ã©ã¹ã§æé«ã ãšç¢ºä¿¡ããŠããŸãããQtã§æžããŠãã人ã¯ãã§ã«ãããç¥ã£ãŠããŸãã
幎éãéããŠå€åããŠããäœãããããŸãã Qtã®å ŽåãORMã©ã€ãã©ãªãããã³ã®ããã«æ¬¡ã
ãšçŸãå§ããŸããã èå°ã¯ç©ºã§ããïŒ éèŠããããŸããããã«ãªãã¡ãŒããããŸãã ãã®èšäºã§Qt ORMã®äžçã§äœãèµ·ãã£ãŠããããèªãã§ãã ããã ç£èŠå¯Ÿè±¡ã®ã©ã€ãã©ãªã§äœ¿çšããã䜿çšæ³ãšã¡ã«ããºã ã«é¢ããæ倧éã®æ
å ±ãæäŸããããã«ããŸãã ããããORMã¯ããã°ã©ãã³ã°ãœãªã¥ãŒã·ã§ã³ã®éåžžã«è€éãªã»ããã§ããããããããã®1ã€ãå®å
šã«å¥ç®ããããšã¯ã§ããŸããã
ïŒãã®èšäºã¯ãç§èªèº«ã®ORMã®ããã«æ²èŒãããããããã宣äŒçãªãã®ã§ããããšã«æ³šæããŠãã ãããæåã®æå³ïŒã
QxOrmãverã 1.1.1
èè
/ææè
ïŒQxOrm France
ãµã€ã ïŒ
å
¬åŒ ã
SourceForgeã§
ã©ã€ã»ã³ã¹ ïŒGPLv3 +åçš
äŸåé¢ä¿ ïŒQtïŒ4.5+ïŒãããŒã¹ãïŒ1.38+ïŒ
éçºæé ïŒ2010幎ã®åããæåŸã®å€æŽã¯2010幎4æã§ã
ããã¥ã¡ã³ã ïŒäžå®å
šããã©ã³ã¹èª
äŸ ïŒã¯ããæãåºæ¬çãª
éçºã®äž»ãªç®æšã¯ ãæ°žç¶æ§ïŒQtSqlçµç±ïŒãã·ãªã¢ã«åïŒboost ::ã·ãªã¢ã«åçµç±ïŒãããã³ãªãã¬ã¯ã·ã§ã³ã®ã¡ã«ããºã ãæäŸããããšã§ãã
ã©ã€ãã©ãªã¯éåžžã«åŒ·åã«èŠããå€ãã®ããšãå®è¡ã§ããããã§ãã DAOïŒ
ããŒã¿ã¢ã¯ã»ã¹ãªããžã§ã¯ã ïŒã®åçã«åºã¥ããŠæ§ç¯ãããããŒãã«ã«è¡ã衚瀺ããã¯ã©ã¹ããããããã€ãã®ã¡ãœããã䜿çšãããšããã®ãããªè¡ã®ãªã¹ããããŒã¿ããŒã¹ããååŸãããŸãã ãããå¯èœã«ããããã«ãQxOrmã¯ããã³ãã¬ãŒãïŒå€ãã®ãã³ãã¬ãŒãïŒããã¯ããç¶æ¿ãåçŽãªè€æ°ãå«ãéåžžã«ããªãããŒãªã¡ã«ããºã ã䜿çšããŸãã ããªããããã°ã©ãã³ã°ã®ããªãã¯ã奜ããªäººããããšãã°Alexandrescuã奜ããªäººã«ãšã£ãŠããã®ã³ãŒãã¯ç¥ãåãã«ãšã£ãŠéåžžã«èå³æ·±ããã®ã§ãã
äŸãã³ãŒãã説æããå€æãããšã次ã®æ©èœãå®è£
ãããŠããŸãã
- ä»»æã®stl / boostã³ã³ãããŒã«ããŒãã«ããŒã¿ã衚瀺ããŸãã Qtã³ã³ãããŒããã®ããªãã¯ãè¡ããšæããŸãã
- è€éãªãã£ãã·ã³ã°ã
- æãåçŽãªã¯ãšãªã®çæïŒæ¿å
¥ãæŽæ°ãåé€ãããŒãã«ã®äœæããããŠãã¡ããéžæã
- ç¬èªã®QxSqlQueryã§ããQSqlDatabaseãã©ããããŸãã
- ã³ãŒãã¬ãã«ã§ã®1察1ã1察å€ãå€å¯Ÿå€ã®é¢ä¿ã
- ããã·ã¥ãããŒããã³å€ã«ãããœãŒãã䜿çšããŠãããŒ/å€ã¿ã€ãã®stlã®ãããªQxCollectionã³ã¬ã¯ã·ã§ã³ãææããŸãã
- foreachïŒïŒïŒã«ãŒãã®ãã³ãã¬ãŒãå®è£
ããã®åçã¯æšæž¬ããããšããã§ããŸããã
- ãã³ãã¬ãŒãã·ã³ã°ã«ãã³ãå®è£
ããŸããã
é·æïŒ
- äžè¬çãªçŠç¹ã¯ããŒã¿ããŒã¹ã§ã¯ãªããXMLãå«ãæœè±¡çãªã¹ãã¬ãŒãžã«ãããŸãã 確ãã«ãããã¯ãããºãŒã«ããã®ã¹ãºã¡ã«ããšããããŒã¹ãã«ãã£ãŠéæãããŸãã
- éžæããå€ãçŽæ¥ã³ã³ããã«æž¡ããåªããORMæ©èœã
- äžé£ã®è¿œå æ©èœïŒã·ãªã¢ã«åãã³ã³ããããã£ãã·ã¥ãªã©
- ããããŒãæäœããããã®åçŽãªæ§æã äœè
ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãèšèšãããšãã«ååšããäœãã«å°ãããããšãããããŸãã ãã¹ãŠãè«ççã§ããã¡ããšããŠããŠãBoostãšSTLã«éåžžã«äŒŒãŠããŸãã Qtã¹ã¿ã€ã«ã¯æå°éã§ãã
- æè¡ã©ã€ãã©ãª; ãã ããå
éšãããã³ã調ã¹ãã®ã¯éåžžã«é£ãããããããã¯ãŸãã«ãã€ãã¹ã§ãã
çæïŒ
- äžè¬çãªçŠç¹ã¯ããŒã¿ããŒã¹ã§ã¯ãªããæœè±¡ã¹ãã¬ãŒãžã§ãã
- 匱ãSQLãµããŒãã ç¹ã«ãWHEREãJOINãGROUP BYãORDER BYãªã©ã®çæã¯ãããŸããã ããšãã°ããã£ã«ã¿ãŒã«ãã£ãŠç¹å®ã®ããŒã¿ãæœåºããã«ã¯ãããããã¹ãŠãéžæããŠãããSTL / Boostã¢ã«ãŽãªãºã ãé©çšããå¿
èŠããããŸãã ïŒããããç§ã¯ãã¹ãŠã«ã€ããŠç¢ºä¿¡ããããŸãã;å€åäœããèŠéãããããããŸãããããã«ããããããããœãŒã¹ã³ãŒãã«ã¯WHEREçæããããŸãã-ããã¯äºå®ã§ããïŒ
- 匱ãããã¥ã¡ã³ãã ããããèè
ã¯ãååãªäŸãšãã¥ãŒããªã¢ã«ããããšä¿¡ããŠããŸãããç§ã¯ããã¯æããŸããã ç§ãã¡Qtããã°ã©ããŒã¯ãåªããå®å
šãªããã¥ã¡ã³ãã«æ
£ããŠããŸãã ã¯ã©ã¹ãã¡ãœããããŸãã¯å®æ°ã®èª¬æã¯ãããŸããã ãŸããäœã-ãã©ã³ã¹èªã§ã
- ã©ã€ãã©ãªã®é¢äžã ããªããããã«ããªãèªèº«ã®äœããè¿œå ã§ããããšãæãã§ããããŸããã
- äžæ¯ãåŸæŒãããŸãã
- å
èš± ããã¯ã圌女ãå®å
šã«èªç±ã ãšèšãããšã§ã¯ãããŸããã ã©ã€ãã©ãªããŒã¹ã®è£œåã販売ãããã§ããïŒ èè
ã«æ¯æããŸãã
- äž»ãªãã®ïŒã©ã€ãã©ãªã¯éçºäžã§ã¯ãªããããã¥ã¡ã³ãã¯ç¿»èš³ãããŠããŸããã èè
ã¯ãæåã«å€åœã®ã€ã³ã¿ãŒãããã§QxOrmãåºã宣äŒãããã®åŸå§¿ãæ¶ããŸããã ããŒãžã§ã³1.1.1ãæåã§å¯äžã§ããã
é説çã«ããã¹ãŠã®äžå©ãªç¹ãé€ãã°ãQxOrmã¯ã»ãšãã©å¯äžã®Qtãšäºææ§ã®ããæ¬æ ŒçãªORMãœãªã¥ãŒã·ã§ã³ã§ãã ãããŠããã¯ãè€éãªãããžã§ã¯ãã«ãšã£ãŠéèŠãªãã£ãã·ã³ã°ãããå¯äžã®ãœãªã¥ãŒã·ã§ã³ã§ãã ä»ã®ORMãQxOrmãšæ¯èŒãããå¯èœæ§ã¯äœãããããã®å°ããªã¬ãã¥ãŒã¯ä»ã®ã¬ãã¥ãŒãããå€ãããšãããããŸãã ãã ãã倧èŠæš¡ãããžã§ã¯ãã§ã©ã€ãã©ãªã䜿çšããå Žåãç¹ã«æœè±¡ãªããžããªã§ã¯ãªãæ¬æ ŒçãªDBMSã§äœæ¥ããŠããå Žåã¯ãä»ã®å¯èœæ§ãå¿
èŠã«ãªãå ŽåããããŸãããããã§ã¯ãããŸããã äœããã®ãã°ãä¿®æ£ããããšæãã§ããã-ããããããã¯ããã»ã©åçŽã§ã¯ãããŸããã ããããã®èªè»¢è»ãšæŸèæãçºæããå¿
èŠããããŸãã ãããžã§ã¯ãã¯å¿
ç¶çã«ãã¡ã©ã«ãªããŸãã ããã©ããããããã€ãã®åªããæ©èœã ããå¿
èŠãªå°ããªãããžã§ã¯ãã®å Žåãã©ã€ãã©ãªã¯æçšã§ããBoostãåŒãç· ããããšãæããªãç¯å²ã§ã
ããããŒã¯ã©ã¹ã®äŸïŒãã¹ãŠã®ã³ãŒãã¯ããã¥ã¡ã³ãããååŸãããŸãïŒïŒ
ã¯ã©ã¹è¬
{
å
¬é ïŒ
é·ã ID ;
QStringå;
QStringã®èª¬æã
drug ïŒ ïŒ ïŒ id ïŒ 0 ïŒ { ; }
ä»®æ³ ãè¬ç©ïŒ ïŒ { ; }
} ;
QX_REGISTER_HPP_MY_TEST_EXE ïŒ drugãqx :: trait :: no_base_class_defined ã 1 ïŒ
QX_REGISTER_CPP_MY_TEST_EXE ïŒ drug ïŒ //ãã®ãã¯ãã¯ãQxOrmã³ã³ããã¹ã㧠'drug'ã¯ã©ã¹ãç»é²ããããã«å¿
èŠã§ã
åå空é qx {
ãã³ãã¬ãŒã <> void register_class ïŒ QxClass < drug > ïŒ t ïŒ
{
tã id ïŒ ïŒ drug :: id ã "id" ïŒ ; // 'drug :: id' <=>äž»ããŒãããŒã¿ããŒã¹ã«ç»é²ããŸã
tã data ïŒ ïŒ drug :: name ã "name" ã 1 ïŒ ; //ã㌠'name'ããã³ããŒãžã§ã³ '1'㧠'drug :: name'ããããã£ãç»é²ããŸã
tã data ïŒ ïŒ drug :: description ã "desc" ïŒ ; // 'drug :: description'ããããã£ãã㌠'desc'ã«ç»é²ããŸã
} }
䜿çšäŸïŒ
//ãã©ãã°ãä¿åããããã«ããŒã¿ããŒã¹ã«ããŒãã«ããã©ãã°ããäœæããŸã
QSqlError daoError = qx :: dao :: create_table < drug > ïŒ ïŒ ;
//ã³ã³ããããããŒã¿ããŒã¹ã«è¬ç©ãæ¿å
¥ããŸã
//ãd1ãããd2ãããd3ãã®ãidãããããã£ã¯èªåæŽæ°ãããŸã
daoError = qx :: dao :: insert ïŒ lst_drug ïŒ ;
// 2çªç®ã®è¬ç©ãå€æŽããŠããŒã¿ããŒã¹ã«æŽæ°ããŸã
d2- > name = "name2 modified" ;
d2- > description = "desc2 modified" ;
daoError = qx :: dao :: update ïŒ d2 ïŒ ;
//ããŒã¿ããŒã¹ããæåã®è¬ç©ãåé€ããŸã
daoError = qx :: dao :: delete_by_id ïŒ d1 ïŒ ;
//ããŒã¿ããŒã¹ã«è¬ãæ°ããŸã
long lDrugCount = qx :: dao :: count < drug > ïŒ ïŒ ;
// IDã3ãã®ãã©ãã°ãæ°ããå€æ°ã«ååŸããŸã
drug_ptr d_tmp ; d_tmpã ãªã»ãã ïŒæ°è¬ïŒ ïŒ ïŒ ;
d_tmp- > id = 3 ;
daoError = qx :: dao :: fetch_by_id ïŒ d_tmp ïŒ ;
//ã³ã³ããããXML圢åŒã®ãã¡ã€ã«ã«è¬ç©ããšã¯ã¹ããŒãïŒã·ãªã¢ã«åïŒ
qx :: ã·ãªã¢ã«å :: xml :: to_file ïŒ lst_drugã "./export_drugs.xml" ïŒ ;
// xmlãã¡ã€ã«ããæ°ããã³ã³ããã«ãã©ãã°ãã€ã³ããŒãããŸã
type_lst_drug lst_drug_tmp ;
qx :: ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ :: xml :: from_file ïŒ lst_drug_tmpã "./export_drugs.xml" ïŒ ;
//è¬ç©ã®ã¯ããŒã³
drug_ptr d_clone = qx :: clone ïŒ * d1 ïŒ ;
//ã¯ã©ã¹åã§æ°ããè¬ãäœæããŸãïŒå·¥å ŽïŒ
boost :: any d_any = qx :: create ïŒ "drug" ïŒ ;
//ãã©ãã°ã³ã³ããã 'qx :: cache'ã«æ¿å
¥ããŸã
qx :: ãã£ãã·ã¥ :: set ïŒ "drugs" ãlst_drug ïŒ ;
QDjangoãverã ???
æçš¿è
ïŒJeremyLainéãBollorételecom
ãµã€ã ïŒ
å
¬åŒ ã
ã¡ãŒãªã³ã°ãªã¹ã
ã©ã€ã»ã³ã¹ ïŒGPLv3ãLGPLv3
äŸåé¢ä¿ ïŒQtïŒ4.5+ïŒ
2010幎6æ3æ¥ãã
éçºäž
ããã¥ã¡ã³ããŒã·ã§ã³ ïŒå®å
šãªè±èªã®doxygençæ
äŸ ïŒã¯ããæãåºæ¬çã§ãã
äž»ãªç®æš ïŒå¯èœãªéãDjangoã«äŒŒããQtçšã®ç¡æã®ORMãäœæããããšã
ãã®éçºã®é·æãšçæã«ã€ããŠè©±ãã®ã¯ææå°æ©ã§ãããã©ã€ãã©ãªã¯ãŸã æ¹æ³ãç¥ããŸããã ã©ããããããã¯DAO / Active Record-ORMã«ãªããŸãã çŸåšãSELECTã®çæãã³ã³ãããžã®ããŒã¿ã®ååŸãCREATE TABLEçæã«ããããŒãã«ã®äœæããã§ã«å¯èœã§ãã èè
ã¯ããã«WHEREçæãèŠå®ãå§ããŸããã ããã«ãANDããã³ORæŒç®åããµããŒããããŠããŸãã ã€ãŸãããã«ãã¬ãã«ãã£ã«ã¿ãŒãäœæã§ãããã£ã«ã¿ãŒãèšå®ããããã®æ§æãæåããŸãã éçºã§ã¯ãQxOrmãšåãã¡ãœãããç©æ¥µçã«äœ¿çšãããŸãïŒãã³ãã¬ãŒããç¶æ¿...ãããã«åºã¥ããŠããããããèè
ã¯åªããOOPã³ãŒãã®å·šå€§ãªãã¡ãŒã ãäœæããã§ãããã
ããããããã ãã§ãã ç§ãã¡ã¯ã1幎åã§åŒ·åãªORMã·ã¹ãã ãQDjangoããæé·ãããšä¿¡ããŠããŸãããä»ã®ãšããããããžã§ã¯ãã§ã®ãã®ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠè©±ãå¿
èŠã¯ãããŸããã
èè
ããã®äœ¿çšäŸã
//ãã¹ãŠã®ãŠãŒã¶ãŒ
QDjangoQuerySet <ãŠãŒã¶ãŒ> users ;
//ãã¹ã¯ãŒãããfooãã§ããŠãŒã¶ãŒåããbarãã§ã¯ãªããã¹ãŠã®ãŠãŒã¶ãŒãæ€çŽ¢ããŸã
QDjangoQuerySet < User > someUsers ;
someUsers =ãŠãŒã¶ãŒã filter ïŒ QDjangoWhere ïŒ "password" ãQDjangoWhere :: Equals ã "foo" ïŒ &&
QDjangoWhere ïŒ "username" ãQDjangoWhere :: NotEquals ã "bar" ïŒ ïŒ ;
//ãŠãŒã¶ãŒåããfooããŸãã¯ãbarãã§ãããã¹ãŠã®ãŠãŒã¶ãŒãæ€çŽ¢ããŸã
someUsers =ãŠãŒã¶ãŒã filter ïŒ QDjangoWhere ïŒ "username" ãQDjangoWhere :: Equals ã "foo" ïŒ ||
QDjangoWhere ïŒ "username" ãQDjangoWhere :: Equals ã "bar" ïŒ ïŒ ;
//ãŠãŒã¶ãŒåããfãã§å§ãŸããã¹ãŠã®ãŠãŒã¶ãŒãæ€çŽ¢ããŸãã
someUsers =ãŠãŒã¶ãŒã filter ïŒ QDjangoWhere ïŒ "username" ãQDjangoWhere :: StartsWith ã "f" ïŒ ïŒ ;
//çµæã®æ°ãå¶éãã
someUsers =ãŠãŒã¶ãŒã å¶é ïŒ 0ã100 ïŒ ;
//äžèŽãããŠãŒã¶ãŒã®æ°ãååŸããŸã
int numberOfUsers = someUsersã ãµã€ãº ïŒ ïŒ ;
//æåã«äžèŽãããŠãŒã¶ãŒãååŸããŸã
ãŠãŒã¶ãŒ* firstUser = someUsersã at ïŒ 0 ïŒ ;
//空ãã¡ã¢ãª
firstUserãåé€ããŸãã
//äžèŽãããŠãŒã¶ãŒã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãã®ãªã¹ããååŸããŸã
QList < QList < QVariant >> propertyLists = someUsersã valuesList ïŒ QStringList ïŒ ïŒ << "username" << "password" ïŒ ;
//ã¯ãšãªã»ããå
ã®ãã¹ãŠã®ãŠãŒã¶ãŒãåé€ããŸã
someUsersã åé€ ïŒ ïŒ ;
ãŠãŒã¶ãŒã¯ã©ã¹ïŒ
ã¯ã©ã¹ User ïŒ public QDjangoModel
{
Q_OBJECT
Q_PROPERTY ïŒ QStringãŠãŒã¶ãŒåREADãŠãŒã¶ãŒåWRITE setUsername ïŒ
Q_PROPERTY ïŒ QStringãã¹ã¯ãŒãREADãã¹ã¯ãŒãWRITE setPassword ïŒ
Q_CLASSINFO ïŒ "ãŠãŒã¶ãŒå" ã "æ倧é·= 255" ïŒ
Q_CLASSINFO ïŒ "password" ã "max_length = 128" ïŒ
å
¬é ïŒ
QStringãŠãŒã¶ãŒåïŒ ïŒ const ;
void setUsername ïŒ const QString ïŒ username ïŒ ;
QString password ïŒ ïŒ const ;
void setPassword ïŒ const QString ïŒ password ïŒ ;
ãã©ã€ããŒã ïŒ
QString m_username ;
QString m_password ;
} ;
QtPersistenceãverã 0.1.1
æçš¿è
ïŒãããã»ããžã£ãŒã¹
ãµã€ã ïŒ
SourceForgeã§
ã©ã€ã»ã³ã¹ ïŒLGPLv3
äŸåé¢ä¿ ïŒQtïŒ4.5+ïŒ
éçºæé ïŒ2009幎æ«-2010幎åé
ããã¥ã¡ã³ã ïŒãªã
äŸ ïŒåäœãã¹ãã§æªã
äž»ãªç®æš ïŒRubyã®ããã€ãã®ïŒïŒïŒORMãšåæ§ã«ãActive Recordã¢ãããŒãã«åºã¥ããŠQtã®ORMãäœæããŸãã
ã»ãšãã©äœãç¥ããªãå¥ã®ã©ã€ãã©ãªã ããã«æªãããšã«ãéçºãããŸããã èè
ã¯ãã®ãããžã§ã¯ããæŸæ£ããããã§ãã å®éã圌女ãã§ããããšã¯ãããããŒã¯ã©ã¹ã䜿çšããŠããŒã¿ããŒã¹ã«ããŒã¿ãæžã蟌ãããšã ãã§ãã
䜿çšäŸã¯ãåäœãã¹ãïŒèªå·±èšè¿°åãã¹ãã¢ãžã¥ãŒã«ã«åºã¥ãïŒã«ãããŸãã
ã¯ã©ã¹ FakeBook ïŒ public QPersistantObject
{
Q_OBJECT
Q_PROPERTY ïŒ QStringèè
READèè
WRITE setAuthor ïŒ
Q_PROPERTY ïŒ int yearPublished READ yearPublished WRITE setYearPublished ïŒ
å
¬é ïŒ
Q_INVOKABLE FakeBook ïŒ QObject * parent = 0 ïŒ ïŒ QPersistantObject ïŒ parent ïŒ { }
virtualãFakeBook ïŒ ïŒ { }
void setAuthor ïŒ const QString ïŒ a ïŒ { m_author = a ; }
QString author ïŒ ïŒ const { return m_author ; }
void setYearPublished ïŒ int year ïŒ { m_yearPublished = year ; }
int yearPublished ïŒ ïŒ const { return m_yearPublished ; }
ãã©ã€ããŒã ïŒ
QString m_author ;
int m_yearPublished ;
} ;
FakeBook * b = æ°ãã FakeBook ;
b- > setAuthor ïŒ "Matt Rogers" ïŒ ;
b- > setYearPublished ïŒ 2009 ïŒ ;
bool objectSaved = b- > save ïŒ ïŒ ;
åé€ b ;
ASSERT_TRUE ïŒ objectSaved ïŒ ;
b = æ°ãã FakeBook ;
b- > setAuthor ïŒ "ãããããžã£ãŒã¹ã§ã¯ãªã" ïŒ ;
b- > setYearPublished ïŒ 1999 ïŒ ;
objectSaved = b- > save ïŒ ïŒ ;
åé€ b ;
ASSERT_TRUE ïŒ objectSaved ïŒ ;
QsT SQLããŒã«ïŒQSTïŒãverã 0.4.2aãªãªãŒã¹
æçš¿è
ïŒAlexander GraninïŒme :)ïŒ
ãµã€ã ïŒ
SourceForgeã® ãã©ãŒã©ã
ã©ã€ã»ã³ã¹ ïŒGPLv3ãLGPLv3
äŸåé¢ä¿ ïŒQtïŒ4.5+ïŒ
2009幎9æãã
éçºäž
ããã¥ã¡ã³ããŒã·ã§ã³ ïŒå®å
šãªãdoxygençæããã·ã¢èªã®ã¿
äŸ ïŒã³ãŒãã§ã¯ãåäœãã¹ãã§ãã ãŸããããŒãžã§ã³0.3ããã³0.4çšã®ç¹å¥ãªTradeDBãµã³ãã«ãããžã§ã¯ãïŒæ¬æ ŒçãªããŒã¿ããŒã¹ã¢ããªã±ãŒã·ã§ã³ïŒãäœæããŸããã
äž»ãªç®æšã¯ãQtã§ã®ããŒã¿ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã®ããã°ã©ãã³ã°ã容æã«ããããšã§ãã
ORMã«ã€ããŠè©±ãã®ã¯ç°¡åã§ã¯ãããŸããã ãµã³ãããã¯ã¹ã«èšäºãæžããŠãHabrã«çããã®ã¯åœŒå¥³ã®ãããã§ããã
èšäºã¯èå³ãããããŸããã§ãã...ããããããã¯ããŒãžã§ã³0.3ã§ãã-ãããŠããªãªãŒã¹ããããŸããã§ãããããã¬ã¢ã«ãã¡ã§ãã ä»ãç§ã¯QSTã®éçºã«ããªãèžã¿èŸŒãã§ããã0.5.1ãã¬ã¢ã«ãã¡çã¯æ¢ã«å©çšå¯èœã§ãã ãããããŸã ããã¹ãããšããããããããŸãã
ãŸã第äžã«ãããã¯éåžžã®ORMã§ã¯ãããŸããã ç§ã¯ã©ã€ãã©ãªãŒãæžãå§ããŸããããçšèªã¯ãŸã ããããŸããã§ããã ã¯ãšãªãäœæããã1ã€ã®å±€ã«éäžãããããã«ãã¯ãšãªãçæããããã®ããŒã«ãå¿
èŠã§ãããã¯ãšãªã远跡ããã®ãç°¡åã§ããã Active Recordã®ãããªã¢ãããŒãã«ã€ããŠã¯ç¥ããŸããã§ããã ãã®çµæãäœãèµ·ãã£ãã®ããããããŸããããã¯ç¬ç¹ã®ORMã§ãããæ£ç¢ºãªORMã§ã¯ãããŸããã ããŒãã«ãã£ãŒã«ãã«ãããããã¯ã©ã¹ãã£ãŒã«ããæ§æããããšã¯ã§ããŸããã å²ãåœãŠã®ã¿ã䜿çšããŠããŒã¿ããŒã¹ã«ããŒã¿ãçŽæ¥ïŒããïŒæžã蟌ãïŒèªã¿åãïŒããšã¯ã§ããŸããã ããããããªãã¯ä»ã®å€ãã®ããšãããããšãã§ããŸãã
æ©äŒã圌ãã¯å³æžé€šã®ãã©ã¹ã§ãã
- SELECTãINSERTãUPDATEãDELETEãEXECUTEãªã©ã®åçŽãªïŒééå±€ã®æå³ã§ãã¬ãžã§ãããªãã®ïŒSQLã¯ãšãªã®çæïŒPostgreSQLã®å Žåãããã¯SELECTã§ãïŒã
- DFDã³ã³ã»ãã¬â宣èšåãã£ãŒã«ãèšè¿°åã ããã«å¿ããŠããªã¯ãšã¹ããçæããæ¹æ³ã説æããŸãã ããã«ãSELECTã§ã¯ãåä¿¡ããããŒã¿ãQtè¡šçŸïŒQTableViewãQListViewãQComboBoxïŒã§äœ¿çšããæ¹æ³ã説æããŸãã
- Qtã€ã³ã¿ãã¥ãŒãšã®çµ±åã ããã€ããããŸããããããŸãã éã¢ã¯ãã£ãã¬ã³ãŒãã¢ãããŒãã«å ããŠãããã¯QSTãšãã®ä»ãã¹ãŠã®äž»ãªéãã§ãã ããšãã°ãç¹å®ã®ã¯ãšãªã«å¯ŸããQTableViewåã®å¹
ãè³æ Œã®ä»äžæ¹æ³ãæå®ã§ããŸãã ãŸãã¯ãäžéšã®ãã¥ãŒã§çŸåšã®è¡ã«é¢é£ä»ããããŠããããŒã¿å€ãéžæã§ããŸãã
- è€æ°ã®ååä»ãã¯ãšãªã
- åãªã¯ãšã¹ãã«å¯ŸããŠ-å€ãã®ç°ãªããã¥ãŒãæ¥ç¶ããæ©èœã
- WHEREã»ã¯ã·ã§ã³ã®çæã ãã£ã«ã¿ã¯éåžžã«ç°ãªã£ãŠèšå®ã§ããŸãã ã¡ã€ã³ãã€ãã¹ïŒANDæŒç®åã䜿çšããŠæ¡ä»¶ãçµåããå¿
èŠããããŸãã
- ãmaxïŒfield_nameïŒãããsumïŒprice * countïŒas summaããšæå®ãããŠããå Žåããã£ãŒã«ãåãèªåçã«ååŸããŸãã åè
ã®å Žåããã£ãŒã«ãã«ã¯å®å
šã«ã¢ã¯ã»ã¹ã§ããŸãïŒãmaxïŒfield_nameïŒãïŒãšçç¥åœ¢ïŒãfield_nameãïŒã®äž¡æ¹ã§ãã 2çªç®ã®ã±ãŒã¹ã§ã¯ããsummaãã®ã¿ã䜿çšããŸãã
- å€æ©èœæ¥ç¶ã¯ã©ã¹ã¯ãQSqlDatabaseã®ã©ãããŒã§ãã æ¥ç¶ãã¹ããå®è¡ããèšå®ãä¿åããç°ãªãååã§æ¥ç¶ããæ¥ç¶ãåé€ã§ããŸãã
- äžè¬çã«ãç°¡åã«äœ¿çšã§ããŸãã äž»ãªããšã¯ãã©ã€ãã©ãªã®åäœã®æå³ãç解ããããšã§ãã
- ããªãŒããŒã¿ã¢ãã«ã ç§ã¯æ¬åœã«ãã®åœ¢åŒã§èªåã®ã©ã€ãã©ãªãæ°ããåé€ããããªãã®ã§ãæçµçã«æžãæããããšæã£ãŠããŸãã ããã¯å¯èœãªç¯å²ãè¶
ããŠãããããå®å
šãªã¡ã¢ãªæäœã«ã€ãªãããŸãã
- ãã¹ãããã°ã©ã -DBãäžã®ããŒã¿ã®å€æãéæ¥çã«ä¿é²ããŸãã
- SQLçæããã¥ãŒãã³ã°ããããã®éåžžã«åºç¯ãªæ©èœã ããšãã°ããã£ã«ã¿ãå«ããããšã§å°æ¥ã®ã¯ãšãªãèšè¿°ããå Žåããã£ã«ã¿ãç¡å¹ãªå Žåãåã«çæãããŸããã ãã ããæå¹ãªå Žåã¯SQLãã€ã¢ã¬ã¯ãã®åœ¢åŒã«çž®å°ãããWHEREã»ã¯ã·ã§ã³ã«è¿œå ãããŸãã æ¯èŒãã¡ã³ã¯ã¿ãŒãèªåçã«é
眮ãããŸãã æååã®å Žåã¯LIKEãæ°åã®å Žåã¯ã=ãã§ãã ãã ããç°¡åã«ãªãŒããŒã©ã€ãã§ããŸãã
- ãã®ä»ã
çæïŒ ãã¡ããããããããããŸãïŒ
- çããæŠå¿µãã¢ã€ãã³ãã£ãã£ã æã§å€ãã®ããšãããªããã°ãªããŸããã ããæ£ç¢ºã«ã¯ããã³ãã©ã¯ã©ã¹ãäœæããããŸããŸãªçš®é¡ã®ã¯ãšãªã®DFDãèšè¿°ããŸãã
- SQLã®ãµããŒãã¯ãã¬ãã¥ãŒããããã¹ãŠã®ã©ã€ãã©ãªãããå€ããããŸããããŸã äžååã§ãã ä»ãç§ã¯ããã€ãã®ã¿ã¹ã¯ã§æŠã£ãŠããŸãã ãããã次ã®ããŒãžã§ã³ã§ã¯ãçæãšã³ãžã³ãæžãçŽãããã§ãããã
- ãã£ãã·ã³ã°ãã·ãªã¢ã«åããªãã¬ã¯ã·ã§ã³ã¯ãããŸãããå®éã®ãªããžã§ã¯ããªã¬ãŒã·ã§ãã«ãããã³ã°ã¯ãããŸããã é¢ä¿ãäœæããæ¹æ³ã¯ãããŸããïŒé¢ä¿ïŒ1ïŒ1ã1ïŒnãnïŒnïŒã ããã§ãç§ã¯èªããªããã°ãªããŸãããQxOrmã¯ä»ã®å
ãè¡ã£ãŠããŸãã
- ãã£ãã·ã³ã°ãªãã ããè¯ãå®è£
æ¹æ³ãèããŠããŸããã
- ä»ã®ãã¹ãŠã®ORMã§èããããŠããã»ã©ç°¡åã«ããŒã¿ãæ§é ã«ååŸããããšã¯ã§ããŸããã ãã ããQSTã¢ãããŒãèªäœã¯ãåã
ã®ããŒã¿ã»ããã«ã€ããŠã¯èããªãããšã瀺åããŠããŸãã 代ããã«ãç¹å®ã®ã¬ã³ãŒãã®åã
ã®å€ã ãã§ãªããã¢ãã«ãšè¡šçŸã®ã¬ãã«ã§èããããšããå§ãããŸãã
- ã©ã€ãã©ãªã¯ä»ã®ã©ã€ãã©ãªã»ã©æè¡çã§ã¯ãããŸããã ã¯ããå
éšã«ã¯ãã³ãã¬ãŒããšç¶æ¿ã®äž¡æ¹ããããŸãããããã¯åãQxOrmãšæ¯èŒããŠãäœããããŸããã ãããã«ãããããã°ã©ãã¯ãããæ°ã«ããå¿
èŠã¯ãããŸããã
- ãããã«ãããæåã«ããã€ãã®éèªææ§ã å€ãã®ããšã¯èªåçã«è¡ããïŒå€æãªã©ïŒãå®å
šãªããã¥ã¡ã³ãã«ãããããããããã«ããã«æ°ä»ããªãããšããããŸãã
- ãã®ä»ã
äžè¬çã«ãã©ã€ãã©ãªã¯ãŸã éçºäžã§ããããã§ã«å€ãã®ããšãç¥ã£ãŠããŸãã ç§ã¯ä»äºã§ããã䜿çšããŸãã ããªãŒã©ã³ãµãŒãšããŠå¥ã®ãããžã§ã¯ããæžããŠããŸãã äžè¬ã«ãäŸã®ãœãŒã¹ã³ãŒããããããããã«ãããã°ã©ããŒã¯QxOrmãŸãã¯QDjangoã䜿çšããããã°ã©ããŒãããäœæ¥ãã¯ããã«å°ãªããªããŸãã ãã³ãã©ãŒã®èª¬æããã¥ãŒã®ããŒã-ã»ãšãã©ãã¹ãŠãã¡ã€ã³ã¯ã©ã¹ïŒQstAbstractModelHandlerïŒã«ããæ©èœãååŸããŸãã ç§ã¯ãã£ãããšå¿
èŠãªãã®ããã¹ãŠçŽ¹ä»ããŸããããã€ã§ãç§ã«é Œãããšãã§ããŸããç§ã¯ééããªãå©ããŸãã ãšã¯å¯Ÿç
§çã«ã ãããã£ãŠãç§ã¯ãã®å°é£ãªäºæ¥ã§ç§ããµããŒãããããšãæ§ããã«ææ¡ããŸãã 幞éã®é¡ãã§ããããŸãã; ããè¯ã-ãã¹ãŠã®ã¬ãã¥ãŒã ãããããã§ãã
SELECTã¯ãšãªã®ãã³ãã©ã¯ã©ã¹ãšDFDèšè¿°åã®äŸã
QstFieldãã£ãŒã«ãã¯ããã¥ãŒã®ã«ã¹ã¿ãã€ãºã«é¢ããæ
å ±ïŒãã£ãŒã«ãã®è¡šç€ºå¯èœæ§ãã¿ã€ãã«ãåå¹
ïŒãéä¿¡ããããšã«æ³šæããŠãã ããã
// personshandler.h
const int PERSONS = 1 ;
const int PERSONS_FULL_NAME = 2 ;
ã¯ã©ã¹ PersonsHandler ïŒ public QstAbstractModelHandler
{
ãã©ã€ããŒã ïŒ
QstBatch _selector ïŒ const int ïŒ queryNumber ïŒ const ;
QstBatch _executor ïŒ const int ïŒ queryNumber ïŒ const ;
} ;
// personshandler.cpp
QstBatch PersonsHandler :: _selector ïŒ const int ïŒ queryNumber ïŒ const
{
QstBatchããã;
if ïŒ queryNumber == PERSONS ïŒ
{
ãããã addSource ïŒ "vPersons" ïŒ ;
batch << QstField ïŒ RolePrimaryKeyã "ID" ïŒ
<< QstField ïŒ "Address_ID" ïŒ
<< QstField ïŒ "LastName" ãFieldVisibleã "Last Name" ã 100 ïŒ
<< QstField ïŒ "FirstName" ãFieldVisibleã "Name" ã 100 ïŒ
<< QstField ïŒ "ParentName" ãFieldVisibleã "ããã«ããŒã " ã 100 ïŒ
<< QstField ïŒ "vcBirthDate" ãFieldVisibleã "Date \ n Birth" ã 90 ïŒ
<< QstField ïŒ "Phone" ãFieldVisibleã "Contact \ n Phone" ã 120 ïŒ
<< QstField ïŒ "[E-Mail]" ãFieldVisibleã "e-mail" ã 120 ïŒ
<< QstField ïŒ "ID" ãå€ïŒ ID_VALUE ïŒ ãPurposeWhere ïŒ
;
}
ä»ã«
if ïŒ queryNumber == PERSONS_FULL_NAME ïŒ
{
ãããã addSource ïŒ "vPersons" ïŒ ;
ããã
<< QstField ïŒ "FullName" ãFieldVisibleã "Full Name" ã 300 ïŒ
<< QstField ïŒ "LastName" ãFieldVisibleã "Last Name" ã 100 ïŒ
<< QstField ïŒ "FirstName" ãFieldVisibleã "Name" ã 100 ïŒ
<< QstField ïŒ "ParentName" ãFieldVisibleã "ããã«ããŒã " ã 100 ïŒ
<< QstField ïŒ "vcBirthDate" ãFieldVisibleã "Date \ n Birth" ã 90 ïŒ
<< QstField ïŒ "Phone" ãFieldVisibleã "Contact \ n Phone" ã 120 ïŒ
<< QstField ïŒ "[E-Mail]" ãFieldVisibleã "e-mail" ã 120 ïŒ
<< QstField ïŒ "ID" ãå€ïŒ ID_VALUE ïŒ ãPurposeWhere ïŒ
<< QstField ïŒ RolePrimaryKeyã "ID" ïŒ
<< QstField ïŒ "Address_ID" ïŒ
;
}
ä»ã«
{
Q_ASSERT ïŒ åœ ïŒ ;
}
ããããè¿ã ãŸãã
}
ãã¥ãŒã®ã«ã¹ã¿ãã€ãºïŒ
// PersonsHandler _personsHandler;
// QstPlainQueryModel _personsModel; //-PersonsFormã¯ã©ã¹ã§èª¬æãããŠããŸãã
void PersonsForm :: loadPersons ïŒ ïŒ
{
_personsHandlerã reload ïŒ PERSONSã ïŒ _personsModel ïŒ ;
_personsHandlerã setTableView ïŒ ui- > tv_PersonsTableView ïŒ ;
}
QVariant PersonsForm :: personID ïŒ ïŒ const
{
_personsHandlerãè¿ããŸãã keyValueOfView ïŒ ïŒ ;
}
䜿çšæ³ïŒ
void PersonsForm :: loadPersonalDocumentInfo ïŒ ïŒ
{
PersonalDocumentsHandler th ;
çªç®ã setValue ïŒ "Person_ID" ãpersonID ïŒ ïŒ ïŒ ;
QVariantMap valMap = thã SelectToMap ïŒ PERSONAL_DOCUMENTSã
QStringList ïŒ ïŒ
<< "DocTypeName"
<< "ã·ãªã¢ã«çªå·"
<< ãçªå·ã
<< "vcIssueDate"
<< "GivenBy" ïŒ ;
ui- > le_DocumentTypeLineEdit- > setText ïŒ valMap [ "DocTypeName" ] ã toString ïŒ ïŒ ïŒ ;
ui- > le_SerialNumberLineEdit- > setText ïŒ valMap [ "SerialNumber" ] ã toString ïŒ ïŒ ïŒ ;
ui- > le_NumberLineEdit- > setText ïŒ valMap [ "Number" ] ã toString ïŒ ïŒ ïŒ ;
ui- > le_IssueDateDateEdit- > setDate ïŒ valMap [ "vcIssueDate" ] ã toDate ïŒ ïŒ ïŒ ;
ui- > le_GivenByLineEdit- > setText ïŒ valMap [ "GivenBy" ] ã toString ïŒ ïŒ ïŒ ;
}