Datenbank.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  1. #include "Datenbank.h"
  2. #include <Datei.h>
  3. #include <iostream>
  4. // Inhalt der ESDatenbank Klasse aus Datenbank.h
  5. // Konstruktor
  6. ESDatenbank::ESDatenbank( InitDatei *zIni )
  7. {
  8. datenbank = new Datenbank( zIni->zWert( "DBBenutzer" )->getText(), zIni->zWert( "DBPasswort" )->getText(),
  9. zIni->zWert( "DBName" )->getText(), zIni->zWert( "DBIP" )->getText(),
  10. (unsigned short)TextZuInt( zIni->zWert( "DBPort" )->getText(), 10 ) );
  11. if( !datenbank->istOk() )
  12. {
  13. std::cout << "ES: Die Verbindung zur Datenbank konnte nicht hergestellt werden.\nDas Programm wird beendet.";
  14. exit( 1 );
  15. }
  16. InitializeCriticalSection( &cs );
  17. ref = 1;
  18. Text befehl = "SELECT port, admin_port FROM server WHERE id = ";
  19. befehl += zIni->zWert( "ServerId" )->getText();
  20. lock();
  21. datenbank->befehl( befehl );
  22. Result res = datenbank->getResult();
  23. unlock();
  24. if( res.zeilenAnzahl == 1 )
  25. {
  26. zIni->addWert( "ServerPort", res.values[ 0 ] );
  27. zIni->addWert( "AdminServerPort", res.values[ 1 ] );
  28. }
  29. res.destroy();
  30. }
  31. // Destruktor
  32. ESDatenbank::~ESDatenbank()
  33. {
  34. datenbank->release();
  35. DeleteCriticalSection( &cs );
  36. }
  37. // nicht constant
  38. void ESDatenbank::lock()
  39. {
  40. EnterCriticalSection( &cs );
  41. }
  42. void ESDatenbank::unlock()
  43. {
  44. LeaveCriticalSection( &cs );
  45. }
  46. int ESDatenbank::istAdministrator( const char *name, const char *passwort )
  47. {
  48. Text *befehl = new Text( "SELECT id FROM benutzer WHERE name = '" );
  49. Text n( name );
  50. n.ersetzen( "'", "''" );
  51. befehl->append( (char*)n );
  52. befehl->append( "' AND passwort = '" );
  53. Text p( passwort );
  54. p.ersetzen( "'", "''" );
  55. befehl->append( (char*)p );
  56. befehl->append( "'" );
  57. lock();
  58. datenbank->befehl( befehl->getText() );
  59. Result res = datenbank->getResult();
  60. unlock();
  61. befehl->release();
  62. int ret = 0;
  63. if( res.zeilenAnzahl > 0 )
  64. ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  65. res.destroy();
  66. return ret;
  67. }
  68. bool ESDatenbank::adminHatRecht( int id, int recht )
  69. {
  70. Text *befehl = new Text( "SELECT * FROM benutzer_rechte WHERE benutzer_id = " );
  71. befehl->append( id );
  72. befehl->append( " AND rechte_id = " );
  73. befehl->append( recht );
  74. lock();
  75. datenbank->befehl( befehl->getText() );
  76. int ret = datenbank->getZeilenAnzahl();
  77. unlock();
  78. befehl->release();
  79. return ret != 0;
  80. }
  81. bool ESDatenbank::proveKlient( int num, int sNum )
  82. {
  83. Text *befehl = new Text( "SELECT * FROM server_erhaltung_clients WHERE server_erhaltung_id = " );
  84. befehl->append( sNum );
  85. befehl->append( " AND client_id = " );
  86. befehl->append( num );
  87. lock();
  88. datenbank->befehl( befehl->getText() );
  89. Result res = datenbank->getResult();
  90. unlock();
  91. befehl->release();
  92. bool ret = 0;
  93. if( res.zeilenAnzahl == 1 )
  94. ret = 1;
  95. res.destroy();
  96. return ret;
  97. }
  98. Text *ESDatenbank::getKlientKey( int cId )
  99. {
  100. lock();
  101. if( !datenbank->befehl( Text( "SELECT schluessel FROM clients WHERE id = " ) += cId ) )
  102. {
  103. unlock();
  104. return 0;
  105. }
  106. Result res = datenbank->getResult();
  107. unlock();
  108. if( !res.zeilenAnzahl )
  109. {
  110. res.destroy();
  111. return 0;
  112. }
  113. Text *ret = new Text( res.values[ 0 ].getText() );
  114. res.destroy();
  115. return ret;
  116. }
  117. void ESDatenbank::unregisterKlient( int num, int sNum )
  118. {
  119. Text *befehl = new Text( "DELETE FROM server_erhaltung_clients WHERE client_id = " );
  120. befehl->append( num );
  121. befehl->append( " AND server_erhaltung_id = " );
  122. befehl->append( sNum );
  123. lock();
  124. datenbank->befehl( befehl->getText() );
  125. int za = datenbank->getZeilenAnzahl();
  126. unlock();
  127. if( za == 1 )
  128. {
  129. befehl->setText( "UPDATE server_erhaltung SET clients = clients - 1 WHERE id = " );
  130. befehl->append( sNum );
  131. lock();
  132. datenbank->befehl( befehl->getText() );
  133. unlock();
  134. }
  135. befehl->release();
  136. }
  137. bool ESDatenbank::setServerStatus( int id, int status )
  138. {
  139. Text *befehl = new Text( "UPDATE server_erhaltung SET server_status_id = " );
  140. *befehl += status;
  141. *befehl += "WHERE id = ";
  142. *befehl += id;
  143. lock();
  144. if( !datenbank->befehl( befehl->getText() ) )
  145. {
  146. unlock();
  147. befehl->release();
  148. return 0;
  149. }
  150. bool ret = datenbank->getZeilenAnzahl() != 0;
  151. unlock();
  152. befehl->release();
  153. return ret;
  154. }
  155. bool ESDatenbank::setMaxClients( int id, int maxC )
  156. {
  157. Text *befehl = new Text( "UPDATE server_erhaltung SET max_clients = " );
  158. befehl->append( maxC );
  159. befehl->append( " WHERE id = " );
  160. befehl->append( id );
  161. lock();
  162. if( !datenbank->befehl( befehl->getText() ) )
  163. {
  164. unlock();
  165. befehl->release();
  166. return 0;
  167. }
  168. bool ret = datenbank->getZeilenAnzahl() > 0;
  169. unlock();
  170. befehl->release();
  171. return ret;
  172. }
  173. int ESDatenbank::getAdminPort( int id )
  174. {
  175. Text *befehl = new Text( "SELECT admin_port FROM server_erhaltung WHERE id = " );
  176. befehl->append( id );
  177. lock();
  178. if( !datenbank->befehl( befehl->getText() ) )
  179. {
  180. unlock();
  181. befehl->release();
  182. return 0;
  183. }
  184. Result res = datenbank->getResult();
  185. unlock();
  186. befehl->release();
  187. if( !res.zeilenAnzahl )
  188. {
  189. res.destroy();
  190. return 0;
  191. }
  192. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  193. res.destroy();
  194. return ret;
  195. }
  196. bool ESDatenbank::serverIstNichtPausiert( int id )
  197. {
  198. Text *befehl = new Text( "SELECT server_status_id FROM server_erhaltung WHERE id = " );
  199. befehl->append( id );
  200. lock();
  201. if( !datenbank->befehl( befehl->getText() ) )
  202. {
  203. unlock();
  204. befehl->release();
  205. return 0;
  206. }
  207. Result res = datenbank->getResult();
  208. unlock();
  209. befehl->release();
  210. if( !res.zeilenAnzahl )
  211. {
  212. res.destroy();
  213. return 0;
  214. }
  215. bool ret = (int)res.values[ 0 ] == 3;
  216. res.destroy();
  217. return ret;
  218. }
  219. bool ESDatenbank::getPatchServer( int client, Text *ip, int *port )
  220. {
  221. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_patch AS a, server_patch_clients AS b "
  222. "WHERE a.id = b.server_patch_id AND b.client_id = " );
  223. befehl->append( client );
  224. lock();
  225. if( !datenbank->befehl( befehl->getText() ) )
  226. {
  227. unlock();
  228. befehl->release();
  229. return 0;
  230. }
  231. Result res = datenbank->getResult();
  232. unlock();
  233. befehl->release();
  234. if( !res.zeilenAnzahl )
  235. {
  236. res.destroy();
  237. return 0;
  238. }
  239. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  240. ip->setText( res.values[ 1 ].getText() );
  241. res.destroy();
  242. return 1;
  243. }
  244. bool ESDatenbank::getRegisterServer( int client, Text *ip, int *port )
  245. {
  246. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_register AS a, server_register_clients AS b "
  247. "WHERE a.id = b.server_register_id AND b.client_id = " );
  248. befehl->append( client );
  249. lock();
  250. if( !datenbank->befehl( befehl->getText() ) )
  251. {
  252. unlock();
  253. befehl->release();
  254. return 0;
  255. }
  256. Result res = datenbank->getResult();
  257. unlock();
  258. befehl->release();
  259. if( !res.zeilenAnzahl )
  260. {
  261. res.destroy();
  262. return 0;
  263. }
  264. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  265. ip->setText( res.values[ 1 ].getText() );
  266. res.destroy();
  267. return 1;
  268. }
  269. bool ESDatenbank::getLoginServer( int client, Text *ip, int *port )
  270. {
  271. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_login AS a, server_login_clients AS b "
  272. "WHERE a.id = b.server_login_id AND b.client_id = " );
  273. befehl->append( client );
  274. lock();
  275. if( !datenbank->befehl( befehl->getText() ) )
  276. {
  277. unlock();
  278. befehl->release();
  279. return 0;
  280. }
  281. Result res = datenbank->getResult();
  282. unlock();
  283. befehl->release();
  284. if( !res.zeilenAnzahl )
  285. {
  286. res.destroy();
  287. return 0;
  288. }
  289. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  290. ip->setText( res.values[ 1 ].getText() );
  291. res.destroy();
  292. return 1;
  293. }
  294. bool ESDatenbank::getInformationServer( int client, Text *ip, int *port )
  295. {
  296. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_information AS a, server_information_clients AS b "
  297. "WHERE a.id = b.server_information_id AND b.client_id = " );
  298. befehl->append( client );
  299. lock();
  300. if( !datenbank->befehl( befehl->getText() ) )
  301. {
  302. unlock();
  303. befehl->release();
  304. return 0;
  305. }
  306. Result res = datenbank->getResult();
  307. unlock();
  308. befehl->release();
  309. if( !res.zeilenAnzahl )
  310. {
  311. res.destroy();
  312. return 0;
  313. }
  314. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  315. ip->setText( res.values[ 1 ].getText() );
  316. res.destroy();
  317. return 1;
  318. }
  319. bool ESDatenbank::getChatServer( int client, Text *ip, int *port )
  320. {
  321. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_chat AS a, server_chat_clients AS b "
  322. "WHERE a.id = b.server_chat_id AND b.client_id = " );
  323. befehl->append( client );
  324. lock();
  325. if( !datenbank->befehl( befehl->getText() ) )
  326. {
  327. unlock();
  328. befehl->release();
  329. return 0;
  330. }
  331. Result res = datenbank->getResult();
  332. unlock();
  333. befehl->release();
  334. if( !res.zeilenAnzahl )
  335. {
  336. res.destroy();
  337. return 0;
  338. }
  339. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  340. ip->setText( res.values[ 1 ].getText() );
  341. res.destroy();
  342. return 1;
  343. }
  344. bool ESDatenbank::getAnmeldungServer( int client, Text *ip, int *port )
  345. {
  346. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_anmeldung AS a, server_anmeldung_clients AS b "
  347. "WHERE a.id = b.server_anmeldung_id AND b.client_id = " );
  348. befehl->append( client );
  349. lock();
  350. if( !datenbank->befehl( befehl->getText() ) )
  351. {
  352. unlock();
  353. befehl->release();
  354. return 0;
  355. }
  356. Result res = datenbank->getResult();
  357. unlock();
  358. befehl->release();
  359. if( !res.zeilenAnzahl )
  360. {
  361. res.destroy();
  362. return 0;
  363. }
  364. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  365. ip->setText( res.values[ 1 ].getText() );
  366. res.destroy();
  367. return 1;
  368. }
  369. bool ESDatenbank::getSpielServer( int client, Text *ip, int *port )
  370. {
  371. Text *befehl = new Text( "SELECT account_id FROM account_clients WHERE client_id = " );
  372. befehl->append( client );
  373. lock();
  374. if( !datenbank->befehl( befehl->getText() ) )
  375. {
  376. unlock();
  377. befehl->release();
  378. return 0;
  379. }
  380. Result res = datenbank->getResult();
  381. unlock();
  382. if( !res.zeilenAnzahl )
  383. {
  384. res.destroy();
  385. befehl->release();
  386. return 0;
  387. }
  388. int accountId = TextZuInt( res.values[ 0 ].getText(), 10 );
  389. res.destroy();
  390. befehl->setText( "SELECT a.id FROM spiel a, spiel_spieler b WHERE b.spiel_id = a.id "
  391. "AND a.spiel_status_id < 3 AND b.spiel_spieler_status_id = 5 AND b.account_id = " );
  392. befehl->append( accountId );
  393. lock();
  394. if( !datenbank->befehl( befehl->getText() ) )
  395. {
  396. unlock();
  397. befehl->release();
  398. return 0;
  399. }
  400. res = datenbank->getResult();
  401. unlock();
  402. if( !res.zeilenAnzahl )
  403. {
  404. res.destroy();
  405. befehl->release();
  406. return 0;
  407. }
  408. int spielId = TextZuInt( res.values[ 0 ].getText(), 10 );
  409. res.destroy();
  410. befehl->setText( "SELECT spiel_server_id FROM spiel WHERE id = " );
  411. befehl->append( spielId );
  412. lock();
  413. if( !datenbank->befehl( befehl->getText() ) )
  414. {
  415. unlock();
  416. befehl->release();
  417. return 0;
  418. }
  419. res = datenbank->getResult();
  420. unlock();
  421. if( !res.zeilenAnzahl )
  422. {
  423. res.destroy();
  424. befehl->release();
  425. return 0;
  426. }
  427. int serverId = TextZuInt( res.values[ 0 ].getText(), 10 );
  428. res.destroy();
  429. befehl->setText( "SELECT port, ip FROM server_spiel WHERE id = " );
  430. befehl->append( serverId );
  431. lock();
  432. if( !datenbank->befehl( befehl->getText() ) )
  433. {
  434. unlock();
  435. befehl->release();
  436. return 0;
  437. }
  438. res = datenbank->getResult();
  439. unlock();
  440. befehl->release();
  441. if( !res.zeilenAnzahl )
  442. {
  443. res.destroy();
  444. return 0;
  445. }
  446. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  447. ip->setText( res.values[ 1 ].getText() );
  448. res.destroy();
  449. return 1;
  450. }
  451. bool ESDatenbank::getShopServer( int client, Text *ip, int *port )
  452. {
  453. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_shop AS a, server_shop_clients AS b "
  454. "WHERE a.id = b.server_shop_id AND b.client_id = " );
  455. befehl->append( client );
  456. lock();
  457. if( !datenbank->befehl( befehl->getText() ) )
  458. {
  459. unlock();
  460. befehl->release();
  461. return 0;
  462. }
  463. Result res = datenbank->getResult();
  464. unlock();
  465. befehl->release();
  466. if( !res.zeilenAnzahl )
  467. {
  468. res.destroy();
  469. return 0;
  470. }
  471. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  472. ip->setText( res.values[ 1 ].getText() );
  473. res.destroy();
  474. return 1;
  475. }
  476. bool ESDatenbank::getNewsServer( int client, Text *ip, int *port )
  477. {
  478. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_news AS a, server_news_clients AS b "
  479. "WHERE a.id = b.server_news_id AND b.client_id = " );
  480. befehl->append( client );
  481. lock();
  482. if( !datenbank->befehl( befehl->getText() ) )
  483. {
  484. unlock();
  485. befehl->release();
  486. return 0;
  487. }
  488. Result res = datenbank->getResult();
  489. unlock();
  490. befehl->release();
  491. if( !res.zeilenAnzahl )
  492. {
  493. res.destroy();
  494. return 0;
  495. }
  496. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  497. ip->setText( res.values[ 1 ].getText() );
  498. res.destroy();
  499. return 1;
  500. }
  501. bool ESDatenbank::getHistorieServer( int client, Text *ip, int *port )
  502. {
  503. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_historie AS a, server_historie_clients AS b "
  504. "WHERE a.id = b.server_historie_id AND b.client_id = " );
  505. befehl->append( client );
  506. lock();
  507. if( !datenbank->befehl( befehl->getText() ) )
  508. {
  509. unlock();
  510. befehl->release();
  511. return 0;
  512. }
  513. Result res = datenbank->getResult();
  514. unlock();
  515. befehl->release();
  516. if( !res.zeilenAnzahl )
  517. {
  518. res.destroy();
  519. return 0;
  520. }
  521. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  522. ip->setText( res.values[ 1 ].getText() );
  523. res.destroy();
  524. return 1;
  525. }
  526. bool ESDatenbank::getKartenServer( int client, Text *ip, int *port )
  527. {
  528. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_karten AS a, server_karten_clients AS b "
  529. "WHERE a.id = b.server_karten_id AND b.client_id = " );
  530. befehl->append( client );
  531. lock();
  532. if( !datenbank->befehl( befehl->getText() ) )
  533. {
  534. unlock();
  535. befehl->release();
  536. return 0;
  537. }
  538. Result res = datenbank->getResult();
  539. unlock();
  540. befehl->release();
  541. if( !res.zeilenAnzahl )
  542. {
  543. res.destroy();
  544. return 0;
  545. }
  546. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  547. ip->setText( res.values[ 1 ].getText() );
  548. res.destroy();
  549. return 1;
  550. }
  551. bool ESDatenbank::getEditorServer( int client, Text *ip, int *port )
  552. {
  553. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_editor AS a, server_editor_clients AS b "
  554. "WHERE a.id = b.server_editor_id AND b.client_id = " );
  555. befehl->append( client );
  556. lock();
  557. if( !datenbank->befehl( befehl->getText() ) )
  558. {
  559. unlock();
  560. befehl->release();
  561. return 0;
  562. }
  563. Result res = datenbank->getResult();
  564. unlock();
  565. befehl->release();
  566. if( !res.zeilenAnzahl )
  567. {
  568. res.destroy();
  569. return 0;
  570. }
  571. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  572. ip->setText( res.values[ 1 ].getText() );
  573. res.destroy();
  574. return 1;
  575. }
  576. void ESDatenbank::removeKlient( int klientId )
  577. {
  578. Text *befehl = new Text( "SELECT unregister_client( " );
  579. befehl->append( klientId );
  580. befehl->append( " )" );
  581. lock();
  582. datenbank->befehl( befehl->getText() );
  583. unlock();
  584. befehl->release();
  585. }
  586. int ESDatenbank::clientIstEingeloggt( int clientId )
  587. {
  588. Text *befehl = new Text( "SELECT account_id FROM account_clients WHERE client_id = " );
  589. befehl->append( clientId );
  590. lock();
  591. if( !datenbank->befehl( befehl->getText() ) )
  592. {
  593. unlock();
  594. befehl->release();
  595. return 0;
  596. }
  597. Result res = datenbank->getResult();
  598. unlock();
  599. befehl->release();
  600. if( !res.zeilenAnzahl )
  601. {
  602. res.destroy();
  603. return 0;
  604. }
  605. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  606. res.destroy();
  607. return ret;
  608. }
  609. int ESDatenbank::logoutKlient( int klientId, Array< int > *ret )
  610. {
  611. Text *befehl = new Text( "SELECT logout_client( " );
  612. befehl->append( klientId );
  613. befehl->append( " )" );
  614. lock();
  615. datenbank->befehl( befehl->getText() );
  616. Result res = datenbank->getResult();
  617. unlock();
  618. befehl->release();
  619. for( int i = 0; i < res.zeilenAnzahl; i++ )
  620. ret->set( TextZuInt( res.values[ i ].getText(), 10 ), i );
  621. int retVal = res.zeilenAnzahl;
  622. res.destroy();
  623. return retVal;
  624. }
  625. int ESDatenbank::getSpielerAusGruppe( int gruppeId, Array< int > *accountId )
  626. {
  627. Text *befehl = new Text( "SELECT account_id FROM gruppe_spieler WHERE gruppe_id = " );
  628. befehl->append( gruppeId );
  629. lock();
  630. if( !datenbank->befehl( befehl->getText() ) )
  631. {
  632. unlock();
  633. befehl->release();
  634. return 0;
  635. }
  636. Result res = datenbank->getResult();
  637. unlock();
  638. befehl->release();
  639. int ret = res.zeilenAnzahl;
  640. for( int i = 0; i < ret; i++ )
  641. accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
  642. return ret;
  643. }
  644. int ESDatenbank::kickSpielerAusGruppe( int gruppeId, int accountId )
  645. {
  646. Text *befehl = new Text( "SELECT spieler_verlaesst_gruppe( " );
  647. befehl->append( accountId );
  648. befehl->append( ", " );
  649. befehl->append( gruppeId );
  650. befehl->append( " )" );
  651. lock();
  652. if( !datenbank->befehl( befehl->getText() ) )
  653. {
  654. unlock();
  655. befehl->release();
  656. return 0;
  657. }
  658. Result res = datenbank->getResult();
  659. unlock();
  660. befehl->release();
  661. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  662. res.destroy();
  663. return ret;
  664. }
  665. int ESDatenbank::getGruppeAdmin( int gruppeId )
  666. {
  667. Text *befehl = new Text( "SELECT admin_account_id FROM gruppe WHERE id = " );
  668. befehl->append( gruppeId );
  669. lock();
  670. if( !datenbank->befehl( befehl->getText() ) )
  671. {
  672. unlock();
  673. befehl->release();
  674. return 0;
  675. }
  676. Result res = datenbank->getResult();
  677. unlock();
  678. befehl->release();
  679. if( !res.zeilenAnzahl )
  680. {
  681. res.destroy();
  682. return 0;
  683. }
  684. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  685. res.destroy();
  686. return ret;
  687. }
  688. int ESDatenbank::getSpielerAusChatroom( int chatroomId, Array< int > *accountId )
  689. {
  690. Text *befehl = new Text( "SELECT account_id FROM chatroom_spieler WHERE chatroom_id = " );
  691. befehl->append( chatroomId );
  692. lock();
  693. if( !datenbank->befehl( befehl->getText() ) )
  694. {
  695. unlock();
  696. befehl->release();
  697. return 0;
  698. }
  699. Result res = datenbank->getResult();
  700. unlock();
  701. befehl->release();
  702. int ret = res.zeilenAnzahl;
  703. for( int i = 0; i < ret; i++ )
  704. accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
  705. return ret;
  706. }
  707. int ESDatenbank::getChatroomAdmin( int chatroomId )
  708. {
  709. Text *befehl = new Text( "SELECT admin_account_id FROM chatroom WHERE id = " );
  710. befehl->append( chatroomId );
  711. lock();
  712. if( !datenbank->befehl( befehl->getText() ) )
  713. {
  714. unlock();
  715. befehl->release();
  716. return 0;
  717. }
  718. Result res = datenbank->getResult();
  719. unlock();
  720. befehl->release();
  721. if( !res.zeilenAnzahl )
  722. {
  723. res.destroy();
  724. return 0;
  725. }
  726. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  727. res.destroy();
  728. return ret;
  729. }
  730. // constant
  731. Text *ESDatenbank::getLetzterFehler() const
  732. {
  733. return datenbank->getLetzterFehler();
  734. }
  735. // Reference Counting
  736. ESDatenbank *ESDatenbank::getThis()
  737. {
  738. ref++;
  739. return this;
  740. }
  741. ESDatenbank *ESDatenbank::release()
  742. {
  743. ref--;
  744. if( !ref )
  745. delete this;
  746. return 0;
  747. }