mirror of
https://github.com/Rogiel/l2jserver2
synced 2025-12-06 07:32:46 +00:00
Implements count queries
This commit is contained in:
@@ -599,7 +599,7 @@ public abstract class AbstractOrientDatabaseService extends
|
|||||||
final DocumentDatabaseRow row = new DocumentDatabaseRow();
|
final DocumentDatabaseRow row = new DocumentDatabaseRow();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
final O object = iterator.next();
|
final O object = iterator.next();
|
||||||
if(testDesire(object))
|
if (testDesire(object))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
row.setDocument(new ODocument(database, entity.getTableName()));
|
row.setDocument(new ODocument(database, entity.getTableName()));
|
||||||
@@ -687,7 +687,7 @@ public abstract class AbstractOrientDatabaseService extends
|
|||||||
final DocumentDatabaseRow row = new DocumentDatabaseRow();
|
final DocumentDatabaseRow row = new DocumentDatabaseRow();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
final O object = iterator.next();
|
final O object = iterator.next();
|
||||||
if(testDesire(object))
|
if (testDesire(object))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
List<ODocument> documents = database
|
List<ODocument> documents = database
|
||||||
@@ -698,7 +698,10 @@ public abstract class AbstractOrientDatabaseService extends
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean filter(OQueryContextNative record) {
|
public boolean filter(OQueryContextNative record) {
|
||||||
return query(record, object).go();
|
record = query(record, object);
|
||||||
|
if (record == null)
|
||||||
|
return true;
|
||||||
|
return record.go();
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
if (documents.size() < 1)
|
if (documents.size() < 1)
|
||||||
@@ -777,7 +780,7 @@ public abstract class AbstractOrientDatabaseService extends
|
|||||||
int rows = 0;
|
int rows = 0;
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
final O object = iterator.next();
|
final O object = iterator.next();
|
||||||
if(testDesire(object))
|
if (testDesire(object))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
List<ODocument> documents = database
|
List<ODocument> documents = database
|
||||||
@@ -788,7 +791,10 @@ public abstract class AbstractOrientDatabaseService extends
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean filter(OQueryContextNative record) {
|
public boolean filter(OQueryContextNative record) {
|
||||||
return query(record, object).go();
|
record = query(record, object);
|
||||||
|
if (record == null)
|
||||||
|
return true;
|
||||||
|
return record.go();
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
for (final ODocument document : documents) {
|
for (final ODocument document : documents) {
|
||||||
@@ -1029,4 +1035,57 @@ public abstract class AbstractOrientDatabaseService extends
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An query implementation designed to count objects in the database
|
||||||
|
*
|
||||||
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
|
*
|
||||||
|
* @param <E>
|
||||||
|
* the query entity type
|
||||||
|
*/
|
||||||
|
public static abstract class CountQuery<E extends RelationalPathBase<?>>
|
||||||
|
extends AbstractQuery<Integer> {
|
||||||
|
/**
|
||||||
|
* The query entity
|
||||||
|
*/
|
||||||
|
protected final E entity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param entity
|
||||||
|
* the entity type
|
||||||
|
*/
|
||||||
|
public CountQuery(E entity) {
|
||||||
|
this.entity = entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final Integer query(ODatabaseDocumentTx database,
|
||||||
|
DatabaseService service) {
|
||||||
|
List<ODocument> documents = database
|
||||||
|
.query(new ONativeSynchQuery<OQueryContextNative>(database,
|
||||||
|
entity.getTableName(), new OQueryContextNative()) {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean filter(OQueryContextNative record) {
|
||||||
|
record = query(record);
|
||||||
|
if (record == null)
|
||||||
|
return true;
|
||||||
|
return record.go();
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return documents.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the OrientDB document filtering. If all results are wanted,
|
||||||
|
* <code>null</code> should be returned.
|
||||||
|
*
|
||||||
|
* @param record
|
||||||
|
* the document record
|
||||||
|
* @return the record instance or <code>null</code>
|
||||||
|
*/
|
||||||
|
protected abstract OQueryContextNative query(OQueryContextNative record);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1065,4 +1065,45 @@ public abstract class AbstractSQLDatabaseService extends
|
|||||||
return objects;
|
return objects;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An query implementation designed to count objects in the database
|
||||||
|
*
|
||||||
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
|
*
|
||||||
|
* @param <E>
|
||||||
|
* the query entity type
|
||||||
|
*/
|
||||||
|
public static abstract class CountQuery<E extends RelationalPathBase<?>>
|
||||||
|
extends AbstractQuery<Integer> {
|
||||||
|
/**
|
||||||
|
* The query entity
|
||||||
|
*/
|
||||||
|
protected final E entity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param entity
|
||||||
|
* the entity typeO
|
||||||
|
*/
|
||||||
|
public CountQuery(E entity) {
|
||||||
|
this.entity = entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final Integer query(
|
||||||
|
SQLQueryFactory<? extends AbstractSQLQuery<?>, ?, ?, ?, ?, ?> factory,
|
||||||
|
DatabaseService database) {
|
||||||
|
final AbstractSQLQuery<?> count = factory.query().from(entity);
|
||||||
|
query(count);
|
||||||
|
return (int) count.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the query filtering
|
||||||
|
*
|
||||||
|
* @param q
|
||||||
|
* the query clause
|
||||||
|
*/
|
||||||
|
protected abstract void query(AbstractSQLQuery<?> q);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user