woc now also translates DB preset values
authorkonrad <konrad@6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33>
Tue, 3 Feb 2009 15:56:58 +0000 (15:56 +0000)
committerkonrad <konrad@6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33>
Tue, 3 Feb 2009 15:56:58 +0000 (15:56 +0000)
git-svn-id: https://silmor.de/svn/softmagic/smoke/trunk@262 6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33

woc/phpout.cpp
woc/processor.cpp
woc/processor.h

index 0a2b8fb..6ea8a2f 100644 (file)
@@ -122,7 +122,22 @@ void WocPHPServerOut::newTable(const WocTable&tbl)
        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());
        
index cb44b7f..a25ee18 100644 (file)
@@ -279,7 +279,7 @@ WocTable::WocTable(const QDomElement&tbl)
                        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;
@@ -307,7 +307,7 @@ WocTable::WocTable(const QDomElement&tbl)
                                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;
@@ -332,6 +332,7 @@ WocTable::WocTable(const QDomElement&tbl)
                }
                m_columns.append(cl);
        }
+       
        //Foreign getter methods
        nl=tbl.elementsByTagName("Foreign");
        for(int i=0;i<nl.size();i++){
@@ -341,6 +342,35 @@ WocTable::WocTable(const QDomElement&tbl)
                //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){
@@ -411,7 +441,7 @@ QString WocTable::columnDefault(QString c)const
        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)
index e65deac..74ebcb6 100644 (file)
@@ -14,6 +14,7 @@
 #define WOC_PROCESSOR_H
 
 #include <QList>
+#include <QMap>
 #include <QObject>
 #include <QPair>
 
@@ -40,6 +41,7 @@ class WocTable
                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;
@@ -47,7 +49,6 @@ class WocTable
                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;
@@ -58,6 +59,8 @@ class WocTable
                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;
@@ -68,6 +71,7 @@ class WocTable
                };
                QList<s_col>m_columns;
                QList<QPair<QString,QString> >m_foreign;
+               QList<QMap<QString,QString> >m_presets;
 };
 
 class WocOutput:public QObject