13,824
社区成员
发帖
与我相关
我的任务
分享
class TBindFWD
{
private:
char CHANNELID[ROWCOUNT][5];
char RATECODE[ROWCOUNT][5];
char FEEDID[ROWCOUNT][5];
char FEEDBID[ROWCOUNT][15];
char FEEDASK[ROWCOUNT][15];
char FEEDMID[ROWCOUNT][15];
char VALIDFEEDBID[ROWCOUNT][15];
char VALIDFEEDASK[ROWCOUNT][15];
char VALIDFEEDMID[ROWCOUNT][15];
char BIDDELTA[ROWCOUNT][15];
char ASKDELTA[ROWCOUNT][15];
char QUOTEBID[ROWCOUNT][15];
char QUOTEASK[ROWCOUNT][15];
char QUOTEMID[ROWCOUNT][15];
char VALIDQUOTEBID[ROWCOUNT][15];
char VALIDQUOTEASK[ROWCOUNT][15];
char VALIDQUOTEMID[ROWCOUNT][15];
char BIDVOLUME[ROWCOUNT][19];
char ASKVOLUME[ROWCOUNT][19];
char TRADEMARK[ROWCOUNT][2];
char RUNSTATE[ROWCOUNT][2];
char VALUEDATE[ROWCOUNT][9];
char QUOTEBASIS[ROWCOUNT][15];
char QUOTEHIGH[ROWCOUNT][15];
char QUOTELOW[ROWCOUNT][15];
char QUOTEOPEN[ROWCOUNT][15];
char QUOTECLOSE[ROWCOUNT][15];
char REFRESHCOUNT[ROWCOUNT][9];
//char REFRESHTIME[ROWCOUNT][19];
char TERMID[ROWCOUNT][5]; //
char SPOTBID[ROWCOUNT][15]; //
char SPOTASK[ROWCOUNT][15]; //
char SPOTMID[ROWCOUNT][15]; //
char MATURITYDATE[ROWCOUNT][9]; //
char CALCBID[ROWCOUNT][15]; //
char CALCASK[ROWCOUNT][15]; //
std::string sql;
sql::TBindDefine * bd;
int _rowcount;
std::map<string, void *> bdmap;
pricepub::TPriceFPQuoteItem item;
//std::string datetimestr;
public:
TBindFWD(std::string bdsql);
TBindFWD();
~TBindFWD(){delete bd;};
int GetRowcount() { return _rowcount;};
std::string GetSQL() { return sql;};
sql::TBindDefine * GetBindDefine() { return bd;};
void AddItem(pricepub::TPriceFPQuoteItem item1);
};
//---------------------------------------------------------------------------
TBindFWD::TBindFWD(std::string bdsql)
{
int fieldcount, pos;
fieldcount = 0;
pos = 0;
while (1)
{
pos = bdsql.find(":bind_", pos);
if (pos == std::string::npos)
break;
pos = pos + 6;
fieldcount ++;
}
//fieldcount --;
//std::cout << "FWD:fieldcount = " << fieldcount << std::endl;
bd = new sql::TBindDefine (fieldcount);
do {
int pos1, pos2;
pos1 = bdsql.find(":bind_");
if (pos1 == std::string::npos)
break;
pos2 = bdsql.find(' ', pos1+6);
if (pos2 == std::string::npos)
{
std::cout << "Error in SQL!" << std::endl;
lang::mstring mstr;
mstr << "Error in SQL!";
throw lang::Exception(mstr.str());;
}
do
{
char c = bdsql[pos2-1];
if (isalpha(c))
break;
else
pos2 = pos2 - 1;
} while (1);
std::string field = bdsql.substr(pos1+6, pos2-pos1-6);
field = lang::TCharSet::Upper(field);
if (!strcmp(field.c_str(), "CHANNELID"))
{
bd->AddField((char *)CHANNELID, 5);
bdmap["CHANNELID"] = (void *)(&(item.ChannelID));
}
else if (!strcmp(field.c_str(), "RATECODE"))
{
bd->AddField((char *)RATECODE, 5);
bdmap["RATECODE"] = (void *)(&(item.RateCode));
}
else if (!strcmp(field.c_str(), "FEEDID"))
{
bd->AddField((char *)FEEDID, 5);
bdmap["FEEDID"] = (void *)(&(item.FeedID));
}
else if (!strcmp(field.c_str(), "FEEDBID"))
{
bd->AddField((char *)FEEDBID, 15);
bdmap["FEEDBID"] = (void *)(&(item.FeedBid));
}
else if (!strcmp(field.c_str(), "FEEDASK"))
{
bd->AddField((char *)FEEDASK, 15);
bdmap["FEEDASK"] = (void *)(&(item.FeedAsk));
}
else if (!strcmp(field.c_str(), "FEEDMID"))
{
bd->AddField((char *)FEEDMID, 15);
bdmap["FEEDMID"] = (void *)(&(item.FeedMid));
}
else if (!strcmp(field.c_str(), "VALIDFEEDBID"))
{
bd->AddField((char *)VALIDFEEDBID, 15);
bdmap["VALIDFEEDBID"] = (void *)(&(item.ValidFeedBid));
}
else if (!strcmp(field.c_str(), "VALIDFEEDASK"))
{
bd->AddField((char *)VALIDFEEDASK, 15);
bdmap["VALIDFEEDASK"] = (void *)(&(item.ValidFeedAsk));
}
else if (!strcmp(field.c_str(), "VALIDFEEDMID"))
{
bd->AddField((char *)VALIDFEEDMID, 15);
bdmap["VALIDFEEDMID"] = (void *)(&(item.ValidFeedMid));
}
else if (!strcmp(field.c_str(), "BIDDELTA"))
{
bd->AddField((char *)BIDDELTA, 15);
bdmap["BIDDELTA"] = (void *)(&(item.BidDelta));
}
else if (!strcmp(field.c_str(), "ASKDELTA"))
{
bd->AddField((char *)ASKDELTA, 15);
bdmap["ASKDELTA"] = (void *)(&(item.AskDelta));
}
else if (!strcmp(field.c_str(), "QUOTEBID"))
{
bd->AddField((char *)QUOTEBID, 15);
bdmap["QUOTEBID"] = (void *)(&(item.QuoteBid));
}
else if (!strcmp(field.c_str(), "QUOTEASK"))
{
bd->AddField((char *)QUOTEASK, 15);
bdmap["QUOTEASK"] = (void *)(&(item.QuoteAsk));
}
else if (!strcmp(field.c_str(), "QUOTEMID"))
{
bd->AddField((char *)QUOTEMID, 15);
bdmap["QUOTEMID"] = (void *)(&(item.QuoteMid));
}
else if (!strcmp(field.c_str(), "VALIDQUOTEBID"))
{
bd->AddField((char *)VALIDQUOTEBID, 15);
bdmap["VALIDQUOTEBID"] = (void *)(&(item.ValidQuoteBid));
}
else if (!strcmp(field.c_str(), "VALIDQUOTEASK"))
{
bd->AddField((char *)VALIDQUOTEASK, 15);
bdmap["VALIDQUOTEASK"] = (void *)(&(item.ValidQuoteAsk));
}
else if (!strcmp(field.c_str(), "VALIDQUOTEMID"))
{
bd->AddField((char *)VALIDQUOTEMID, 15);
bdmap["VALIDQUOTEMID"] = (void *)(&(item.ValidQuoteMid));
}
else if (!strcmp(field.c_str(), "BIDVOLUME"))
{
bd->AddField((char *)BIDVOLUME, 19);
bdmap["BIDVOLUME"] = (void *)(&(item.BidVolume));
}
else if (!strcmp(field.c_str(), "ASKVOLUME"))
{
bd->AddField((char *)ASKVOLUME, 19);
bdmap["ASKVOLUME"] = (void *)(&(item.AskVolume));
}
else if (!strcmp(field.c_str(), "TRADEMARK"))
{
bd->AddField((char *)TRADEMARK, 2);
bdmap["TRADEMARK"] = (void *)(&(item.TradeMark));
}
else if (!strcmp(field.c_str(), "RUNSTATE"))
{
bd->AddField((char *)RUNSTATE, 2);
bdmap["RUNSTATE"] = (void *)(&(item.RunState));
}
else if (!strcmp(field.c_str(), "VALUEDATE"))
{
bd->AddField((char *)VALUEDATE, 9);
bdmap["VALUEDATE"] = (void *)(&(item.ValueDate));
}
else if (!strcmp(field.c_str(), "QUOTEBASIS"))
{
bd->AddField((char *)QUOTEBASIS, 15);
bdmap["QUOTEBASIS"] = (void *)(&(item.QuoteBasis));
}
else if (!strcmp(field.c_str(), "QUOTEHIGH"))
{
bd->AddField((char *)QUOTEHIGH, 15);
bdmap["QUOTEHIGH"] = (void *)(&(item.QuoteHigh));
}
else if (!strcmp(field.c_str(), "QUOTELOW"))
{
bd->AddField((char *)QUOTELOW, 15);
bdmap["QUOTELOW"] = (void *)(&(item.QuoteLow));
}
else if (!strcmp(field.c_str(), "QUOTEOPEN"))
{
bd->AddField((char *)QUOTEOPEN, 15);
bdmap["QUOTEOPEN"] = (void *)(&(item.QuoteOpen));
}
else if (!strcmp(field.c_str(), "QUOTECLOSE"))
{
bd->AddField((char *)QUOTECLOSE, 15);
bdmap["QUOTECLOSE"] = (void *)(&(item.QuoteClose));
}
else if (!strcmp(field.c_str(), "REFRESHCOUNT"))
{
bd->AddField((char *)REFRESHCOUNT, 9);
bdmap["REFRESHCOUNT"] = (void *)(&(item.UpdateCount));
}
/*
else if (!strcmp(field.c_str(), "REFRESHTIME"))
{
bd->AddField((char *)REFRESHTIME, 19);
bdmap["REFRESHTIME"] = (void *)(&datetimestr);
} */
else if (!strcmp(field.c_str(), "TERMID"))
{
bd->AddField((char *)TERMID, 5);
bdmap["TERMID"] = (void *)(&(item.TermID));
}
else if (!strcmp(field.c_str(), "SPOTBID"))
{
bd->AddField((char *)SPOTBID, 15);
bdmap["SPOTBID"] = (void *)(&(item.SpotBid));
}
else if (!strcmp(field.c_str(), "SPOTASK"))
{
bd->AddField((char *)SPOTASK, 15);
bdmap["SPOTASK"] = (void *)(&(item.SpotAsk));
}
else if (!strcmp(field.c_str(), "SPOTMID"))
{
bd->AddField((char *)SPOTMID, 15);
bdmap["SPOTMID"] = (void *)(&(item.SpotMid));
}
else if (!strcmp(field.c_str(), "MATURITYDATE"))
{
bd->AddField((char *)MATURITYDATE, 9);
bdmap["MATURITYDATE"] = (void *)(&(item.MaturityDate));
}
else
{
std::cout << "Error Field!" << std::endl;
/*
lang::mstring mstr;
mstr << "Error Field!";
throw lang::Exception(mstr.str()); */
}
bdsql = bdsql.erase(pos1, 6);
} while (1);
sql = bdsql;
_rowcount = 0;
}