dbdefs.cpp

00001 /***************************************************************************
00002  *   Copyright (C) 2004 by Michael Moritz                                  *
00003  *   mimo@restoel.net                                                      *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  *   This program is distributed in the hope that it will be useful,       *
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00013  *   GNU General Public License for more details.                          *
00014  *                                                                         *
00015  *   You should have received a copy of the GNU General Public License     *
00016  *   along with this program; if not, write to the                         *
00017  *   Free Software Foundation, Inc.,                                       *
00018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00019  ***************************************************************************/
00020 #ifdef HAVE_CONFIG_H
00021 #include <config.h>
00022 #endif
00023 #include <cassert>
00024 #include "dbdefs.h"
00025 #include "defs.h"
00026 
00027 
00029 static const WLStaticDef g_wlSqlDefs[] = { 
00030 
00031         { TABLE_NETWORK,
00032                 //testTable statement: this is used for testing if table exists
00033                 //                       and for initialising the memory cache
00034                 //                                              testTable adds WHERE 1=0 to this
00035                 "SELECT * FROM "TABLE_NETWORK,
00036                 //createTable: this is used in case test fails to create the table
00037                 { "CREATE TABLE "TABLE_NETWORK" ( "
00038                         ATTR_NWADDRESS" VARCHAR("STRINGIFY(MAX_LEN_NWADDRESS)") not null default '',"
00039                         ATTR_NWCOMMENT" VARCHAR("STRINGIFY(MAX_LEN_NWCOMMENT)") DEFAULT ''," },
00040                 //the field used for PRIMARY KEY 
00041                 ATTR_NWADDRESS,
00042                 WlModule::CM_exactMatch, 
00043                 "SELECT "ATTR_NWCOMMENT" FROM "TABLE_NETWORK,
00044                 {
00045                         { ATTR_NWADDRESS,"=", Triplet::TM_quotedweakclient,0},
00046 //example                       { ATTR_NWADDRESS,"=", Triplet::TM_weakclient,"AND"},
00047                         { NULL }
00048                 },
00049                 // comment field (only used by dbcached)
00050                 ATTR_NWCOMMENT
00051         },
00052         { TABLE_RECIPIENT,
00053                 "SELECT * FROM "TABLE_RECIPIENT,
00054                 { "CREATE TABLE "TABLE_RECIPIENT" ( "
00055                         ATTR_RCPTADDRESS" VARCHAR("STRINGIFY(MAX_LEN_RCPTADDRESS)") NOT NULL DEFAULT '',"
00056                         ATTR_RCPTCOMMENT" VARCHAR("STRINGIFY(MAX_LEN_RCPTCOMMENT)") DEFAULT ''," },
00057                 ATTR_RCPTADDRESS,
00058                 WlModule::CM_exactMatch, 
00059                 "SELECT "ATTR_RCPTCOMMENT" FROM "TABLE_RECIPIENT,
00060                 {
00061                         { ATTR_RCPTADDRESS,"=", Triplet::TM_recipient,0},
00062                         { NULL }
00063                 },
00064                 ATTR_RCPTCOMMENT
00065         },
00066         { TABLE_SENDER,
00067                 "SELECT * FROM "TABLE_SENDER,
00068                 { "CREATE TABLE "TABLE_SENDER" ( "
00069                         ATTR_SNDADDRESS" VARCHAR("STRINGIFY(MAX_LEN_SNDADDRESS)") NOT NULL DEFAULT '',"
00070                         ATTR_SNDCOMMENT" VARCHAR("STRINGIFY(MAX_LEN_SNDCOMMENT)") DEFAULT ''," },
00071                 ATTR_SNDADDRESS,
00072                 WlModule::CM_exactMatch, 
00073                 "SELECT "ATTR_SNDCOMMENT" FROM "TABLE_SENDER,
00074                 {
00075                         { ATTR_SNDADDRESS,"=", Triplet::TM_sender,0},
00076                         { NULL }
00077                 },
00078                 ATTR_SNDCOMMENT
00079         },
00080         { TABLE_PATTERN,
00081                 "SELECT * FROM "TABLE_PATTERN,
00082                 { "CREATE TABLE "TABLE_PATTERN" ( "
00083                         ATTR_EXPRESSION" VARCHAR("STRINGIFY(MAX_LEN_EXPRESSION)") NOT NULL DEFAULT '',"
00084                         ATTR_PATTCOMMENT" VARCHAR("STRINGIFY(MAX_LEN_PATTCOMMENT)") DEFAULT ''," },
00085                 ATTR_EXPRESSION,
00086                 WlModule::CM_patternMatch, 
00087                 "SELECT * FROM "TABLE_PATTERN,
00088                 {
00089                         { NULL }
00090                 },
00091                 ATTR_PATTCOMMENT
00092         },
00093         { NULL }
00094 };
00096 static const WLStaticDef g_tripletsSqlDef =
00097 {       TABLE_TRIPLETS,
00098                 "SELECT * FROM "TABLE_TRIPLETS,
00099                 {       "CREATE TABLE "TABLE_TRIPLETS" ("
00100                                 ATTR_CLIENT" VARCHAR("STRINGIFY(MAX_LEN_CLIENT)"),"
00101                                 ATTR_SENDER" VARCHAR("STRINGIFY(MAX_LEN_SENDER)") NOT NULL,"
00102                                 ATTR_RECIPIENT" VARCHAR("STRINGIFY(MAX_LEN_RECIPIENT)") NOT NULL,"
00103                                 TRIPLETS_IPDEF(64)" NUMERIC(4,0) DEFAULT 0 NOT NULL,"
00104                                 TRIPLETS_IPDEF(32)" NUMERIC(4,0) DEFAULT 0 NOT NULL,"
00105                                 TRIPLETS_IPDEF(16)" NUMERIC(4,0) DEFAULT 0 NOT NULL,"
00106                                 TRIPLETS_IPDEF(8)" NUMERIC(4,0) DEFAULT 0 NOT NULL,"
00107                                 "count INT NOT NULL DEFAULT '0',"
00108                                 "uts INT NOT NULL,"
00109                                 "PRIMARY KEY ("
00110                                         ATTR_RECIPIENT","ATTR_SENDER
00111                                         ","TRIPLETS_IPDEF(64)","TRIPLETS_IPDEF(32)","TRIPLETS_IPDEF(16)","TRIPLETS_IPDEF(8)
00112                                         ")",
00113                         "CREATE INDEX sender_recipient_index ON "TABLE_TRIPLETS
00114                                 "("ATTR_SENDER"(15),"ATTR_RECIPIENT"(15)"
00115                 }
00116 };
00117 
00118 const WLStaticDef& g_getTripletDef()
00119 {
00120         return g_tripletsSqlDef;
00121 }
00122 const WLStaticDef& g_getWlDef(const std::string& tableName) throw (std::out_of_range)
00123 {
00124         unsigned iSql = 0;
00125         while((iSql < ((sizeof(g_wlSqlDefs)/sizeof(WLStaticDef))-1))
00126                 && ::g_wlSqlDefs[iSql]._tableName ) {
00127                 if(::g_wlSqlDefs[iSql]._tableName == tableName) 
00128                         return ::g_wlSqlDefs[iSql];
00129                 iSql++;
00130         }
00131         throw std::out_of_range("Possible (typing) error in configuration. No whitelisting supported for: "
00132                 +tableName+" (g_getWlDef)");
00133 }

Generated on Tue Jul 24 16:36:53 2007 for gps by  doxygen 1.5.1