mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-08-16 08:34:12 +02:00
2018-07-19 Fred Gleason <fredg@paravelsystems.com>
* Added a 'CAST_DOWNLOADS' table to the database. * Incremented the database version to 294.
This commit is contained in:
parent
94ff45a4dc
commit
c2f11d76be
@ -17194,3 +17194,6 @@
|
|||||||
to be corrupt.
|
to be corrupt.
|
||||||
* Fixed a regression in the RDFeed service that caused detection
|
* Fixed a regression in the RDFeed service that caused detection
|
||||||
of feed names to fail.
|
of feed names to fail.
|
||||||
|
2018-07-19 Fred Gleason <fredg@paravelsystems.com>
|
||||||
|
* Added a 'CAST_DOWNLOADS' table to the database.
|
||||||
|
* Incremented the database version to 294.
|
||||||
|
@ -26,6 +26,7 @@ EXTRA_DIST = audio_cards.txt\
|
|||||||
audio_perms.txt\
|
audio_perms.txt\
|
||||||
cart.txt\
|
cart.txt\
|
||||||
cartslots.txt\
|
cartslots.txt\
|
||||||
|
cast_downloads.txt\
|
||||||
clipboard.txt\
|
clipboard.txt\
|
||||||
clock_lines.txt\
|
clock_lines.txt\
|
||||||
clock_perms.txt\
|
clock_perms.txt\
|
||||||
|
12
docs/tables/cast_downloads.txt
Normal file
12
docs/tables/cast_downloads.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
CAST_DOWNLOADS Table Layout for Rivendell
|
||||||
|
|
||||||
|
The CAST_DOWNLOADS table holds data concerning downloads of podcast episodes.
|
||||||
|
|
||||||
|
|
||||||
|
FIELD NAME TYPE REMARKS
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
ID int(10) unsigned Primary key, Auto Increment
|
||||||
|
FEED_KEY_NAME char(8) From FEEDS.KEY_NAME
|
||||||
|
CAST_ID int(10) unsigned From PODCASTS.ID
|
||||||
|
ACCESS_DATE date
|
||||||
|
ACCESS_COUNT int(10) unsigned
|
@ -24,7 +24,7 @@
|
|||||||
/*
|
/*
|
||||||
* Current Database Version
|
* Current Database Version
|
||||||
*/
|
*/
|
||||||
#define RD_VERSION_DATABASE 293
|
#define RD_VERSION_DATABASE 294
|
||||||
|
|
||||||
|
|
||||||
#endif // DBVERSION_H
|
#endif // DBVERSION_H
|
||||||
|
@ -22,45 +22,27 @@
|
|||||||
|
|
||||||
#include <rdapplication.h>
|
#include <rdapplication.h>
|
||||||
#include <rddb.h>
|
#include <rddb.h>
|
||||||
|
#include <rdescape_string.h>
|
||||||
#include <rdweb.h>
|
#include <rdweb.h>
|
||||||
|
|
||||||
#include "rdfeedlog.h"
|
#include "rdfeedlog.h"
|
||||||
|
|
||||||
void RDCreateFeedLog(QString keyname)
|
|
||||||
{
|
|
||||||
QString sql;
|
|
||||||
RDSqlQuery *q;
|
|
||||||
|
|
||||||
keyname.replace(" ","_");
|
|
||||||
sql=QString().sprintf("create table if not exists %s_FLG (\
|
|
||||||
ID int unsigned primary key auto_increment,\
|
|
||||||
CAST_ID int unsigned,\
|
|
||||||
ACCESS_DATE date,\
|
|
||||||
ACCESS_COUNT int unsigned default 0,\
|
|
||||||
index CAST_ID_IDX(CAST_ID,ACCESS_DATE))",
|
|
||||||
(const char *)keyname);
|
|
||||||
q=new RDSqlQuery(sql);
|
|
||||||
delete q;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void RDDeleteFeedLog(QString keyname)
|
void RDDeleteFeedLog(QString keyname)
|
||||||
{
|
{
|
||||||
keyname.replace(" ","_");
|
QString sql=QString("delete from CAST_DOWNLOADS where ")+
|
||||||
rda->dropTable(keyname+"_FLG");
|
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\"";
|
||||||
|
RDSqlQuery::apply(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void RDDeleteCastCount(QString keyname,unsigned cast_id)
|
void RDDeleteCastCount(QString keyname,unsigned cast_id)
|
||||||
{
|
{
|
||||||
QString sql;
|
QString sql;
|
||||||
RDSqlQuery *q;
|
|
||||||
|
|
||||||
keyname.replace(" ","_");
|
sql=QString("delete from CAST_DOWNLOADS where ")+
|
||||||
sql=QString().sprintf("delete from %s_FLG where CAST_ID=%u",
|
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\" && "+
|
||||||
(const char *)keyname,cast_id);
|
QString().sprintf("CAST_ID=%u",cast_id);
|
||||||
q=new RDSqlQuery(sql);
|
RDSqlQuery::apply(sql);
|
||||||
delete q;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -88,45 +70,25 @@ void RDIncrementCastCount(QString keyname,unsigned cast_id)
|
|||||||
{
|
{
|
||||||
QString sql;
|
QString sql;
|
||||||
RDSqlQuery *q;
|
RDSqlQuery *q;
|
||||||
QDate current_date=QDate::currentDate();
|
QDate now=QDate::currentDate();
|
||||||
|
|
||||||
keyname.replace(" ","_");
|
sql=QString("select ACCESS_COUNT from CAST_DOWNLOADS where ")+
|
||||||
/*
|
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\" && "+
|
||||||
FIXME: Table locking kills updates. Why?
|
QString().sprintf("(CAST_ID=%u)&&",cast_id)+
|
||||||
|
"(ACCESS_DATE=\""+RDEscapeString(now.toString("yyyy-MM-dd"))+"\")";
|
||||||
sql=QString().sprintf("lock tables %s_FLG read",(const char *)keyname);
|
|
||||||
q=new RDSqlQuery(sql);
|
|
||||||
delete q;
|
|
||||||
*/
|
|
||||||
sql=QString().sprintf("select ACCESS_COUNT from %s_FLG where \
|
|
||||||
(CAST_ID=%u)&&(ACCESS_DATE=\"%s\")",
|
|
||||||
(const char *)keyname,
|
|
||||||
cast_id,
|
|
||||||
(const char *)current_date.toString("yyyy-MM-dd"));
|
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
if(q->first()) {
|
if(q->first()) {
|
||||||
sql=QString().sprintf("update %s_FLG set ACCESS_COUNT=%u where \
|
sql=QString("update CAST_DOWNLOADS set ")+
|
||||||
(CAST_ID=%u)&&(ACCESS_DATE=\"%s\")",
|
QString().sprintf("ACCESS_COUNT=%u where ",q->value(0).toUInt()+1)+
|
||||||
(const char *)keyname,
|
QString().sprintf("(CAST_ID=%u)&&",cast_id)+
|
||||||
q->value(0).toUInt()+1,cast_id,
|
"(ACCESS_DATE=\""+RDEscapeString(now.toString("yyyy-MM-dd"))+"\")";
|
||||||
(const char *)current_date.toString("yyyy-MM-dd"));
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sql=QString().sprintf("insert into %s_FLG set \
|
sql=QString("insert into CAST_DOWNLOADS set ")+
|
||||||
CAST_ID=%u,\
|
QString().sprintf("CAST_ID=%u,",cast_id)+
|
||||||
ACCESS_DATE=\"%s\",\
|
"ACCESS_DATE=\""+RDEscapeString(now.toString("yyyy-MM-dd"))+"\","+
|
||||||
ACCESS_COUNT=1",
|
"ACCESS_COUNT=1";
|
||||||
(const char *)keyname,
|
|
||||||
cast_id,
|
|
||||||
(const char *)current_date.toString("yyyy-MM-dd"));
|
|
||||||
}
|
}
|
||||||
|
RDSqlQuery::apply(sql);
|
||||||
delete q;
|
delete q;
|
||||||
q=new RDSqlQuery(sql);
|
|
||||||
delete q;
|
|
||||||
|
|
||||||
/*
|
|
||||||
sql="unlock tables";
|
|
||||||
q=new RDSqlQuery(sql);
|
|
||||||
delete q;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
//
|
//
|
||||||
// Functions for manipulating RSS feed log tables.
|
// Functions for manipulating RSS feed log tables.
|
||||||
//
|
//
|
||||||
// (C) Copyright 2007,2016 Fred Gleason <fredg@paravelsystems.com>
|
// (C) Copyright 2007,2016-2018 Fred Gleason <fredg@paravelsystems.com>
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify
|
// This program is free software; you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License version 2 as
|
// it under the terms of the GNU General Public License version 2 as
|
||||||
@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
#include <qstring.h>
|
#include <qstring.h>
|
||||||
|
|
||||||
void RDCreateFeedLog(QString keyname);
|
|
||||||
void RDDeleteFeedLog(QString keyname);
|
void RDDeleteFeedLog(QString keyname);
|
||||||
void RDDeleteCastCount(QString keyname,unsigned cast_id);
|
void RDDeleteCastCount(QString keyname,unsigned cast_id);
|
||||||
void RDDeleteCastCount(unsigned feed_id,unsigned cast_id);
|
void RDDeleteCastCount(unsigned feed_id,unsigned cast_id);
|
||||||
|
@ -173,7 +173,6 @@ void AddFeed::okData()
|
|||||||
"ITEM_XML=\""+RDEscapeString(DEFAULT_ITEM_XML)+"\"";
|
"ITEM_XML=\""+RDEscapeString(DEFAULT_ITEM_XML)+"\"";
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
delete q;
|
delete q;
|
||||||
RDCreateFeedLog(feed_keyname_edit->text());
|
|
||||||
RDCreateAuxFieldsTable(feed_keyname_edit->text(),rda->config());
|
RDCreateAuxFieldsTable(feed_keyname_edit->text(),rda->config());
|
||||||
sql=QString("select ID from FEEDS where ")+
|
sql=QString("select ID from FEEDS where ")+
|
||||||
"KEY_NAME=\""+RDEscapeString(feed_keyname_edit->text())+"\"";
|
"KEY_NAME=\""+RDEscapeString(feed_keyname_edit->text())+"\"";
|
||||||
|
@ -215,13 +215,12 @@ void PickReportDates::GenerateSubscriptionReport(const QString &keyname,
|
|||||||
//
|
//
|
||||||
// Data Rows
|
// Data Rows
|
||||||
//
|
//
|
||||||
QString keyname_esc=keyname;
|
|
||||||
keyname_esc.replace(" ","_");
|
|
||||||
sql=QString("select ")+
|
sql=QString("select ")+
|
||||||
"ACCESS_DATE,"+ // 00
|
"ACCESS_DATE,"+ // 00
|
||||||
"ACCESS_COUNT,"+ // 01
|
"ACCESS_COUNT,"+ // 01
|
||||||
"CAST_ID "+ // 02
|
"CAST_ID "+ // 02
|
||||||
"from "+keyname_esc+"_FLG where "+
|
"from CAST_DOWNLOADS where "+
|
||||||
|
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\" && "+
|
||||||
"(ACCESS_DATE>=\""+RDEscapeString(edit_startdate_edit->date().
|
"(ACCESS_DATE>=\""+RDEscapeString(edit_startdate_edit->date().
|
||||||
toString("yyyy-MM-dd"))+"\")&&"+
|
toString("yyyy-MM-dd"))+"\")&&"+
|
||||||
"(ACCESS_DATE<=\""+RDEscapeString(edit_enddate_edit->date().
|
"(ACCESS_DATE<=\""+RDEscapeString(edit_enddate_edit->date().
|
||||||
@ -288,12 +287,11 @@ void PickReportDates::GenerateEpisodeReport(const QString &keyname,
|
|||||||
// Data Rows
|
// Data Rows
|
||||||
//
|
//
|
||||||
unsigned total=0;
|
unsigned total=0;
|
||||||
QString keyname_esc=keyname;
|
|
||||||
keyname_esc.replace(" ","_");
|
|
||||||
sql=QString("select ")+
|
sql=QString("select ")+
|
||||||
"ACCESS_DATE,"+
|
"ACCESS_DATE,"+ // 00
|
||||||
"ACCESS_COUNT "+
|
"ACCESS_COUNT "+ // 01
|
||||||
"from "+keyname_esc+"_FLG where "+
|
"from CAST_DOWNLOADS where "+
|
||||||
|
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\" && "+
|
||||||
"(ACCESS_DATE>=\""+RDEscapeString(edit_startdate_edit->date().
|
"(ACCESS_DATE>=\""+RDEscapeString(edit_startdate_edit->date().
|
||||||
toString("yyyy-MM-dd"))+"\")&&"+
|
toString("yyyy-MM-dd"))+"\")&&"+
|
||||||
"(ACCESS_DATE<=\""+RDEscapeString(edit_enddate_edit->date().
|
"(ACCESS_DATE<=\""+RDEscapeString(edit_enddate_edit->date().
|
||||||
|
@ -38,6 +38,53 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg) co
|
|||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Revert 294
|
||||||
|
//
|
||||||
|
if((cur_schema==294)&&(set_schema<cur_schema)) {
|
||||||
|
sql=QString("select KEY_NAME from FEEDS");
|
||||||
|
q=new RDSqlQuery(sql);
|
||||||
|
while(q->next()) {
|
||||||
|
QString tablename=q->value(0).toString()+"_FLG";
|
||||||
|
tablename.replace(" ","_");
|
||||||
|
sql=QString("create table if not exists `")+tablename+"` ("+
|
||||||
|
"ID int unsigned primary key auto_increment,"+
|
||||||
|
"CAST_ID int unsigned,"+
|
||||||
|
"ACCESS_DATE date,"+
|
||||||
|
"ACCESS_COUNT int unsigned default 0,"+
|
||||||
|
"index CAST_ID_IDX(CAST_ID,ACCESS_DATE))";
|
||||||
|
if(!RDSqlQuery::apply(sql,err_msg)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sql=QString("select ")+
|
||||||
|
"CAST_ID,"+ // 00
|
||||||
|
"ACCESS_DATE,"+ // 01
|
||||||
|
"ACCESS_COUNT "+ // 02
|
||||||
|
"from CAST_DOWNLOADS where "+
|
||||||
|
"FEED_KEY_NAME=\""+RDEscapeString(q->value(0).toString())+"\" "+
|
||||||
|
"order by CAST_ID,ACCESS_DATE";
|
||||||
|
q1=new RDSqlQuery(sql,false);
|
||||||
|
while(q1->next()) {
|
||||||
|
sql=QString("insert into `")+tablename+"` set "+
|
||||||
|
QString().sprintf("CAST_ID=%u,",q1->value(0).toUInt())+
|
||||||
|
"ACCESS_DATE=\""+
|
||||||
|
RDEscapeString(q1->value(1).toDate().toString("yyyy-MM-dd"))+"\","+
|
||||||
|
QString().sprintf("ACCESS_COUNT=%u",q1->value(2).toUInt());
|
||||||
|
if(!RDSqlQuery::apply(sql,err_msg)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete q1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!DropTable("CAST_DOWNLOADS",err_msg)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteSchemaVersion(--cur_schema);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Revert 293
|
// Revert 293
|
||||||
//
|
//
|
||||||
|
@ -132,7 +132,7 @@ void MainObject::InitializeSchemaMap() {
|
|||||||
global_version_map["2.17"]=268;
|
global_version_map["2.17"]=268;
|
||||||
global_version_map["2.18"]=272;
|
global_version_map["2.18"]=272;
|
||||||
global_version_map["2.19"]=275;
|
global_version_map["2.19"]=275;
|
||||||
global_version_map["2.20"]=293;
|
global_version_map["2.20"]=294;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -7797,6 +7797,54 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg) co
|
|||||||
WriteSchemaVersion(++cur_schema);
|
WriteSchemaVersion(++cur_schema);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if((cur_schema<294)&&(set_schema>cur_schema)) {
|
||||||
|
sql=QString("create table if not exists CAST_DOWNLOADS (")+
|
||||||
|
"ID int unsigned not null auto_increment primary key,"+
|
||||||
|
"FEED_KEY_NAME char(8) not null,"+
|
||||||
|
"CAST_ID int unsigned not null,"+
|
||||||
|
"ACCESS_DATE date not null,"+
|
||||||
|
"ACCESS_COUNT int unsigned not null default 0,"+
|
||||||
|
"unique index KEY_NAME_CAST_ID_DATE_IDX(FEED_KEY_NAME,CAST_ID,ACCESS_DATE))"+
|
||||||
|
db_table_create_postfix;
|
||||||
|
if(!RDSqlQuery::apply(sql,err_msg)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sql=QString("select KEY_NAME from FEEDS");
|
||||||
|
q=new RDSqlQuery(sql,false);
|
||||||
|
while(q->next()) {
|
||||||
|
QString tablename=q->value(0).toString()+"_FLG";
|
||||||
|
tablename.replace(" ","_");
|
||||||
|
sql=QString("select ")+
|
||||||
|
"CAST_ID,"+ // 00
|
||||||
|
"ACCESS_DATE,"+ // 01
|
||||||
|
"ACCESS_COUNT "+ // 02
|
||||||
|
"from `"+tablename+"` "+
|
||||||
|
"order by ACCESS_DATE";
|
||||||
|
q1=new RDSqlQuery(sql,false);
|
||||||
|
while(q1->next()) {
|
||||||
|
sql=QString("insert into CAST_DOWNLOADS set ")+
|
||||||
|
"FEED_KEY_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+
|
||||||
|
QString().sprintf("CAST_ID=%u,",q1->value(0).toUInt())+
|
||||||
|
"ACCESS_DATE=\""+
|
||||||
|
RDEscapeString(q1->value(1).toDate().toString("yyyy-MM-dd"))+"\","+
|
||||||
|
QString().sprintf("ACCESS_COUNT=%u",q1->value(2).toUInt());
|
||||||
|
if(!RDSqlQuery::apply(sql,err_msg)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete q1;
|
||||||
|
if(!DropTable(tablename,err_msg)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete q;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WriteSchemaVersion(++cur_schema);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -143,10 +143,9 @@ void MainObject::PurgeCast(unsigned id)
|
|||||||
delete q1;
|
delete q1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
QString keyname=q->value(2).toString();
|
sql=QString("delete from CAST_DOWNLOADS where ")+
|
||||||
keyname.replace(" ","_");
|
"FEED_KEY_NAME=\""+RDEscapeString(q->value(2).toString())+"\" && "+
|
||||||
sql=QString().sprintf("delete from %s_FLG where CAST_ID=%d",
|
QString().sprintf("CAST_ID=%d",id);
|
||||||
(const char *)keyname,id);
|
|
||||||
q1=new RDSqlQuery(sql);
|
q1=new RDSqlQuery(sql);
|
||||||
delete q1;
|
delete q1;
|
||||||
|
|
||||||
|
@ -1493,15 +1493,16 @@ void MainObject::ServeSubscriptionReport()
|
|||||||
line_colors[0]=RD_WEB_LINE_COLOR1;
|
line_colors[0]=RD_WEB_LINE_COLOR1;
|
||||||
line_colors[1]=RD_WEB_LINE_COLOR2;
|
line_colors[1]=RD_WEB_LINE_COLOR2;
|
||||||
int current_color=0;
|
int current_color=0;
|
||||||
QString keyname_esc=cast_key_name;
|
sql=QString("select ")+
|
||||||
keyname_esc.replace(" ","_");
|
"ACCESS_DATE,"+ // 00
|
||||||
sql=QString().sprintf("select ACCESS_DATE,ACCESS_COUNT,CAST_ID from %s_FLG \
|
"ACCESS_COUNT,"+ // 01
|
||||||
where (ACCESS_DATE>=\"%s\")&&\
|
"CAST_ID "+ // 02
|
||||||
(ACCESS_DATE<=\"%s\") \
|
"from CAST_DOWNLOADS where "+
|
||||||
order by ACCESS_DATE,CAST_ID desc",
|
"(ACCESS_DATE>=\""+
|
||||||
(const char *)keyname_esc,
|
RDEscapeString(cast_start_date.toString("yyyy-MM-dd"))+"\")&&"+
|
||||||
(const char *)cast_start_date.toString("yyyy-MM-dd"),
|
"(ACCESS_DATE<=\""+
|
||||||
(const char *)cast_end_date.toString("yyyy-MM-dd"));
|
RDEscapeString(cast_end_date.toString("yyyy-MM-dd"))+"\" "+
|
||||||
|
"order by ACCESS_DATE,CAST_ID desc";
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
while(q->next()) {
|
while(q->next()) {
|
||||||
if(q->value(2).toUInt()==0) {
|
if(q->value(2).toUInt()==0) {
|
||||||
@ -1660,16 +1661,17 @@ void MainObject::ServeEpisodeReport()
|
|||||||
line_colors[0]=RD_WEB_LINE_COLOR1;
|
line_colors[0]=RD_WEB_LINE_COLOR1;
|
||||||
line_colors[1]=RD_WEB_LINE_COLOR2;
|
line_colors[1]=RD_WEB_LINE_COLOR2;
|
||||||
int current_color=0;
|
int current_color=0;
|
||||||
QString keyname_esc=cast_key_name;
|
sql=QString("select ")+
|
||||||
keyname_esc.replace(" ","_");
|
"ACCESS_DATE,"+ // 00
|
||||||
sql=QString().sprintf("select ACCESS_DATE,ACCESS_COUNT from %s_FLG \
|
"ACCESS_COUNT "+ // 01
|
||||||
where (ACCESS_DATE>=\"%s\")&&\
|
"from CAST_DOWNLOADS where "+
|
||||||
(ACCESS_DATE<=\"%s\")&& \
|
"FEED_KEY_NAME=\""+RDEscapeString(cast_key_name)+"\" && "+
|
||||||
(CAST_ID=%d) order by ACCESS_DATE",
|
"(ACCESS_DATE>=\""+
|
||||||
(const char *)keyname_esc,
|
RDEscapeString(cast_start_date.toString("yyyy-MM-dd"))+"\")&&"+
|
||||||
(const char *)cast_start_date.toString("yyyy-MM-dd"),
|
"(ACCESS_DATE<=\""+
|
||||||
(const char *)cast_end_date.toString("yyyy-MM-dd"),
|
RDEscapeString(cast_end_date.toString("yyyy-MM-dd"))+"\")&&"+
|
||||||
cast_cast_id);
|
QString().sprintf("(CAST_ID=%d) ",cast_cast_id)+
|
||||||
|
"order by ACCESS_DATE";
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
while(q->next()) {
|
while(q->next()) {
|
||||||
printf("<tr><td align=\"center\" bgcolor=\"%s\">%s</td>\n",
|
printf("<tr><td align=\"center\" bgcolor=\"%s\">%s</td>\n",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user