public synchronized Data[] query(Kriterium krit) throws RemoteException{
boolean[] isPartOfQuery=new boolean[krit.getAttributesCount()];
...
String select=createSelect(krit, isPartOfQuery);
...
}
// the following method was extracted from query()
protected String createSelect(Kriterium krit, boolean[] isPartOfQuery) {
String select = "";
Debug.dbg("DBServerImpl.query("+krit.getName()+")");
DataDescriptor dd=krit.getDescriptor();
Vector selectVector=new Vector();
Vector fromTableVector=new Vector();
Constraint c=null;
for(int i=0;i<dd.getTables().length;i++)
fromTableVector.addElement(dd.getTables()[i]);
for (int i= 0; i < krit.getAttributesCount(); i++) {
isPartOfQuery[i]=false;
c=dd.getConstraint(i);
if (c.getTable() == null) continue;
if (c.getType() == DataDescriptor.REF || c.getType() == DataDescriptor.BACKREF) {
if(dd.getDBTable(i, true) !=null && dd.getDBTable(i, false) !=null ){
// nur Tabellen nehmen, deren Spalten selektiert werden
if(fromTableVector.indexOf(dd.getDBTable(i, true)) != -1 &&
fromTableVector.indexOf(dd.getDBTable(i, false)) != -1){
selectVector.addElement(dd.getDBTable(i, false) + "." +
dd.getAttributeName(i));
select+=((select.length()>0)?", ":" ")+dd.getDBTable(i, false) +
"." + dd.getAttributeName(i);
isPartOfQuery[i]=true;
}
}
} else {
selectVector.addElement(dd.getDBTable(i, false) + "." + dd.getAttributeName(i));
select+=((select.length()>0)?", ":" ")+dd.getDBTable(i, false) +
"." + dd.getAttributeName(i);
isPartOfQuery[i]=true;
}
}
return select;
}
// this heavyweight was refactored by using only ReplaceParameterWithMethod(292)
// this is a lightweight that was later moved to DatabaseFormat which
// deals only with the names of fields
protected String createSelect(Kriterium krit) {
boolean[] isPartOfQuery=isPartOfQuery(krit);
StringBuffer select = null;
Debug.dbg("DBServerImpl.query("+krit.getName()+")");
DataDescriptor dd=krit.getDescriptor();
String qualifiedName;
for (int i= 0; i < krit.getAttributesCount(); i++) {
if (isPartOfQuery[i]) {
qualifiedName=
databaseFormat.createQualifiedName(
null,dd.getDBTable(i, false), dd.getAttributeName(i));
select=databaseFormat.concatExpressions(select,",",qualifiedName);
}
}
return databaseFormat.notNullString(select);
}
// this is also a lightweight that was later moved to DatabaseFormat
// it doesn't care about creating a select string but rather marks the fields
// necessary for the select
protected boolean[] isPartOfQuery(Kriterium krit) {
boolean[] isPartOfQuery=new boolean[krit.getAttributesCount()];
DataDescriptor dd=krit.getDescriptor();
Vector fromTableVector=new Vector();
String table, reftable;
Constraint c=null;
for(int i=0;i<dd.getTables().length;i++)
fromTableVector.addElement(dd.getTables()[i]);
for (int i= 0; i < krit.getAttributesCount(); i++) {
isPartOfQuery[i]=false;
c=dd.getConstraint(i);
if (c.getTable() == null) continue;
table=dd.getDBTable(i, false);
reftable=dd.getDBTable(i, true);
if (c.getType() == DataDescriptor.REF
|| c.getType() == DataDescriptor.BACKREF) {
// nur korrekte Referenzen nutzen
if(reftable !=null && table !=null ){
// nur Tabellen nehmen, deren Spalten selektiert werden
if(fromTableVector.indexOf(reftable) != -1 &&
fromTableVector.indexOf(table) != -1){
isPartOfQuery[i]=true;
}
}
} else isPartOfQuery[i]=true;
}
return isPartOfQuery;
}