|
@@ -563,7 +563,9 @@ Result PSDatenbank::getDateiGruppeListe()
|
|
|
int PSDatenbank::getDateiVersion( const char *pfad, int system, int gruppe )
|
|
|
{
|
|
|
Text *befehl = new Text( "SELECT version FROM datei WHERE pfad = '" );
|
|
|
- befehl->append( pfad );
|
|
|
+ Text p( pfad );
|
|
|
+ p.ersetzen( "'", "''" );
|
|
|
+ befehl->append( (char*)p );
|
|
|
befehl->append( "' AND system_id = " );
|
|
|
befehl->append( system );
|
|
|
befehl->append( " AND datei_gruppe_id = " );
|
|
@@ -614,20 +616,20 @@ int PSDatenbank::getDateiGruppeVersion( int gruppe )
|
|
|
|
|
|
bool PSDatenbank::getFileGroupInfoList( int serverId, Array< FileGroupInfo* > *list )
|
|
|
{
|
|
|
- Text befehl = "SELECT a.id, a.name, 'Fehlt' AS status FROM datei_gruppe a "
|
|
|
+ Text befehl = "SELECT a.id, a.name, 'Fehlt' AS status, a.pfad, a.version FROM datei_gruppe a "
|
|
|
"LEFT JOIN server_patch_datei_gruppe b ON a.id = b.datei_gruppe_id AND b.server_patch_id = ";
|
|
|
befehl += serverId;
|
|
|
befehl += " WHERE b.datei_gruppe_id IS NULL "
|
|
|
"UNION "
|
|
|
- "SELECT a.id, a.name, 'Veraltet' AS status FROM datei_gruppe a, server_patch_datei_gruppe b "
|
|
|
+ "SELECT a.id, a.name, 'Veraltet' AS status, a.pfad, a.version FROM datei_gruppe a, server_patch_datei_gruppe b "
|
|
|
"WHERE a.id = b.datei_gruppe_id AND a.version != b.version AND b.server_patch_datei_gruppe_status_id = 1 AND b.server_patch_id = ";
|
|
|
befehl += serverId;
|
|
|
befehl += " UNION "
|
|
|
- "SELECT a.id, a.name, 'Update' AS status FROM datei_gruppe a, server_patch_datei_gruppe b "
|
|
|
+ "SELECT a.id, a.name, 'Update' AS status, a.pfad, a.version FROM datei_gruppe a, server_patch_datei_gruppe b "
|
|
|
"WHERE a.id = b.datei_gruppe_id AND a.version != b.version AND b.server_patch_datei_gruppe_status_id = 2 AND b.server_patch_id = ";
|
|
|
befehl += serverId;
|
|
|
befehl += " UNION "
|
|
|
- "SELECT a.id, a.name, 'Aktuell' AS status FROM datei_gruppe a, server_patch_datei_gruppe b "
|
|
|
+ "SELECT a.id, a.name, 'Aktuell' AS status, a.pfad, a.version FROM datei_gruppe a, server_patch_datei_gruppe b "
|
|
|
"WHERE a.id = b.datei_gruppe_id AND a.version = b.version AND b.server_patch_id = ";
|
|
|
befehl += serverId;
|
|
|
lock();
|
|
@@ -641,15 +643,195 @@ bool PSDatenbank::getFileGroupInfoList( int serverId, Array< FileGroupInfo* > *l
|
|
|
for( int i = 0; i < res.zeilenAnzahl; i++ )
|
|
|
{
|
|
|
FileGroupInfo *info = new FileGroupInfo();
|
|
|
- info->id = res.values[ 0 + i * 3 ];
|
|
|
- info->name = (char*)res.values[ 1 + i * 3 ];
|
|
|
- info->status = (char*)res.values[ 2 + i * 3 ];
|
|
|
+ info->id = res.values[ 0 + i * 5 ];
|
|
|
+ info->name = (char*)res.values[ 1 + i * 5 ];
|
|
|
+ info->status = (char*)res.values[ 2 + i * 5 ];
|
|
|
+ info->pfad = (char*)res.values[ 3 + i * 5 ];
|
|
|
+ info->version = res.values[ 4 + i * 5 ];
|
|
|
list->add( info );
|
|
|
}
|
|
|
res.destroy();
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+bool PSDatenbank::updateDatei( const char *pfad, char *letzteAEnderung, int system, int gruppe )
|
|
|
+{
|
|
|
+ Text *befehl = new Text( "SELECT * FROM datei WHERE pfad = '" );
|
|
|
+ Text p( pfad );
|
|
|
+ p.ersetzen( "'", "''" );
|
|
|
+ befehl->append( (char*)p );
|
|
|
+ befehl->append( "' AND system_id = " );
|
|
|
+ befehl->append( system );
|
|
|
+ befehl->append( " AND datei_gruppe_id = " );
|
|
|
+ befehl->append( gruppe );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int anz = datenbank->getZeilenAnzahl();
|
|
|
+ unlock();
|
|
|
+ if( anz && !letzteAEnderung ) // datei existiert nicht mehr
|
|
|
+ {
|
|
|
+ befehl->setText( "SELECT * FROM datei"
|
|
|
+ "WHERE geloescht = false AND pfad = '" );
|
|
|
+ befehl->append( (char*)p );
|
|
|
+ befehl->append( "' AND system_id = " );
|
|
|
+ befehl->append( system );
|
|
|
+ befehl->append( " AND datei_gruppe_id = " );
|
|
|
+ befehl->append( gruppe );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int anz = datenbank->getZeilenAnzahl();
|
|
|
+ unlock();
|
|
|
+ if( anz ) // datei wurde noch nicht in die Tabelle datei_loeschen eingetragen
|
|
|
+ {
|
|
|
+ befehl->setText( "UPDATE datei SET geloescht = true WHERE pfad = '" );
|
|
|
+ befehl->append( (char*)p );
|
|
|
+ befehl->append( "' AND system_id = " );
|
|
|
+ befehl->append( system );
|
|
|
+ befehl->append( " AND datei_gruppe_id = " );
|
|
|
+ befehl->append( gruppe );
|
|
|
+ lock();
|
|
|
+ if( datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if( !anz ) // neue Datei erstellt
|
|
|
+ {
|
|
|
+ befehl->setText( "INSERT INTO datei( pfad, version, aenderung_dat, system_id, datei_gruppe_id ) VALUES( '" );
|
|
|
+ befehl->append( (char*)p );
|
|
|
+ befehl->append( "', 1, " );
|
|
|
+ if( !letzteAEnderung )
|
|
|
+ {
|
|
|
+ befehl->append( "NULL, " );
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ befehl->append( "'" );
|
|
|
+ Text l( letzteAEnderung );
|
|
|
+ l.ersetzen( "'", "''" );
|
|
|
+ befehl->append( (char*)l );
|
|
|
+ befehl->append( "', " );
|
|
|
+ }
|
|
|
+ befehl->append( system );
|
|
|
+ befehl->append( ", " );
|
|
|
+ befehl->append( gruppe );
|
|
|
+ befehl->append( " )" );
|
|
|
+ lock();
|
|
|
+ if( datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if( anz && letzteAEnderung ) // Datei existiert bereits
|
|
|
+ {
|
|
|
+ // Datei aus tabelle datei_loeschen entfernen, wenn sie vorhanden ist
|
|
|
+ befehl->setText( "UPDATE datei SET geloescht = false WHERE pfad = '" );
|
|
|
+ befehl->append( (char*)p );
|
|
|
+ befehl->append( "' AND system_id = " );
|
|
|
+ befehl->append( system );
|
|
|
+ befehl->append( " AND datei_gruppe_id = " );
|
|
|
+ befehl->append( gruppe );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ unlock();
|
|
|
+ befehl->setText( "SELECT * FROM datei WHERE pfad = '" );
|
|
|
+ befehl->append( (char*)p );
|
|
|
+ befehl->append( "' AND system_id = " );
|
|
|
+ befehl->append( system );
|
|
|
+ befehl->append( " AND datei_gruppe_id = " );
|
|
|
+ befehl->append( gruppe );
|
|
|
+ befehl->append( " AND aenderung_dat = '" );
|
|
|
+ Text l( letzteAEnderung );
|
|
|
+ l.ersetzen( "'", "''" );
|
|
|
+ befehl->append( (char*)l );
|
|
|
+ befehl->append( "'" );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ anz = datenbank->getZeilenAnzahl();
|
|
|
+ unlock();
|
|
|
+ if( !anz ) // Datei wurde geändert
|
|
|
+ {
|
|
|
+ befehl->setText( "UPDATE datei SET version = version + 1, aenderung_dat = '" );
|
|
|
+ befehl->append( (char*)l );
|
|
|
+ befehl->append( "' WHERE pfad = '" );
|
|
|
+ befehl->append( (char*)p );
|
|
|
+ befehl->append( "' AND system_id = " );
|
|
|
+ befehl->append( system );
|
|
|
+ befehl->append( " AND datei_gruppe_id = " );
|
|
|
+ befehl->append( gruppe );
|
|
|
+ lock();
|
|
|
+ if( datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ befehl->release();
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+bool PSDatenbank::dateiGruppeUpdate( int gruppe )
|
|
|
+{
|
|
|
+ Text *befehl = new Text( "UPDATE datei_gruppe SET version = version + 1 WHERE id = " );
|
|
|
+ befehl->append( gruppe );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int z = datenbank->getZeilenAnzahl();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return z != 0;
|
|
|
+}
|
|
|
+
|
|
|
// constant
|
|
|
Text *PSDatenbank::getLetzterFehler() const
|
|
|
{
|