code+="\n\t);\n";
if(tbl.inBackup())code+="\t$this->backup[]=\""+tbl.name()+"\";\n";
//write presets
-
+ QList<QMap<QString,QString> >presets=tbl.presets();
+ if(presets.size()>0){
+ code+="\t$this->preset[\""+tbl.name()+"\"]=array(";
+ for(int i=0;i<presets.size();i++){
+ if(i)code+=",";
+ code+="\n\t\tarray(";
+ QStringList k=presets[i].keys();
+ for(int j=0;j<k.size();j++){
+ if(j)code+=",";
+ code+="\""+k[j]+"\"=>"+presets[i][k[j]];
+ }
+ code+=")";
+ }
+ code+="\n\t);\n";
+ }
+
//write
m_schema.write(code.toAscii());
m_valid=false;
return;
}
- if(haveColumn(cl.name)){
+ if(hasColumn(cl.name)){
qDebug("Error: double definition of column %s in table %s.",cl.name.toAscii().data(),m_name.toAscii().data());
m_valid=false;
return;
m_valid=false;
return;
}
- if(!woc->table(fgn[0]).haveColumn(fgn[1])){
+ if(!woc->table(fgn[0]).hasColumn(fgn[1])){
qDebug("Error: table %s column %s: foreign key target table/column %s does not exist",m_name.toAscii().data(),cl.name.toAscii().data(),cl.foreign.toAscii().data());
m_valid=false;
return;
}
m_columns.append(cl);
}
+
//Foreign getter methods
nl=tbl.elementsByTagName("Foreign");
for(int i=0;i<nl.size();i++){
//TODO: validate foreign getter
}
+ //Presets
+ nl=tbl.elementsByTagName("Preset");
+ for(int i=0;i<nl.size();i++){
+ QDomElement el=nl.at(i).toElement();
+ if(el.isNull())continue;
+ QMap<QString,QString>ps;
+ QDomNodeList nl2=el.elementsByTagName("V");
+ for(int j=0;j<nl2.size();j++){
+ QDomElement el2=nl2.at(j).toElement();
+ if(el2.isNull())continue;
+ if(!el2.hasAttribute("col") || (!el2.hasAttribute("val") && !el2.hasAttribute("code"))){
+ qDebug("Error: table definition %s contains illegal preset.",m_name.toAscii().data());
+ m_valid=false;
+ return;
+ }
+ QString nm=el2.attribute("col");
+ if(!hasColumn(nm)){
+ qDebug("Error: table definition %s contains preset for invalid column %s.",m_name.toAscii().data(),nm.toAscii().data());
+ m_valid=false;
+ return;
+ }
+ QString v;
+ if(el2.hasAttribute("val"))v="\""+el2.attribute("val").replace("\"","\\\"")+"\"";
+ else v=el2.attribute("code");
+ ps.insert(nm,v);
+ }
+ if(ps.size()>0)m_presets.append(ps);
+ }
+
//sanity checks
//check we have any columns at all
if(m_columns.size()==0){
return "";
}
-bool WocTable::haveColumn(QString c)const
+bool WocTable::hasColumn(QString c)const
{
for(int i=0;i<m_columns.size();i++)
if(m_columns[i].name==c)
#define WOC_PROCESSOR_H
#include <QList>
+#include <QMap>
#include <QObject>
#include <QPair>
QString name()const{return m_name;}
bool inBackup()const{return m_backup;}
+ bool hasColumn(QString)const;
QStringList columns()const;
QStringList primaryColumns()const;
QString columnType(QString)const;
bool columnIsPrimary(QString)const;
bool columnHasDefault(QString)const;
QString columnDefault(QString)const;
- bool haveColumn(QString)const;
bool columnIsForeign(QString)const;
QString columnForeign(QString)const;
bool columnIsIndexed(QString)const;
QStringList foreigns()const;
QString foreignQuery(QString)const;
bool haveForeign(QString)const;
+
+ QList<QMap<QString,QString> > presets()const{return m_presets;}
private:
bool m_valid,m_backup;
QString m_name;
};
QList<s_col>m_columns;
QList<QPair<QString,QString> >m_foreign;
+ QList<QMap<QString,QString> >m_presets;
};
class WocOutput:public QObject