qtinternetradio/irdb/src/irdb.cpp
changeset 16 5723da102db1
child 17 38bbf2dcd608
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irdb/src/irdb.cpp	Fri Sep 17 08:27:59 2010 +0300
@@ -0,0 +1,920 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <QtGlobal> 
+#include <QString>
+#include <QStringList>
+#include <QSqlQuery>
+#include <QFile>
+#include <QMutex>
+#include <QVariant>
+#include <QtDebug>
+#include <QByteArray>
+#include "irdbwrapper.h"
+#include "irsqlstr.h"
+#include "irdb.h"
+
+#define IRDB_ERR_NONE      (0x00)
+#define IRDB_ERR_INSERT    (0x01)
+#define IRDB_ERR_UPDATE    (0x02)
+#define IRDB_ERR_SELECT    (0x03)
+#define IRDB_ERR_DELETE    (0x04)
+#define IRDB_ERR_OPEN      (0x05)
+#define IRDB_ERR_CHANGE    (0x06)
+#define IRDB_ERR_ILLEGAL   (0x07)
+#define IRDB_ERR_WRAPPER   (0x08)
+#define IRDB_CID_EXISTED   (0x10)
+#define IRDB_CID_UNEXISTED (0x11)
+#define IRDB_CID_USER_DEFINE (0xF0000000)
+
+
+IRDB* IRDB::mpIRDBInstance = NULL;
+QMutex IRDB::mMutex;
+
+IRDB::IRDB(): m_RefCnt(0)
+{
+}
+
+IRDB::~IRDB()
+{
+}
+
+IRDB* IRDB::getInstance()
+{
+    mMutex.lock();
+    bool existed = true;
+    
+    if(NULL == mpIRDBInstance)
+    {
+        mpIRDBInstance = new IRDB();
+        existed = false;
+    }
+    
+    ++mpIRDBInstance->m_RefCnt;
+    mMutex.unlock();
+    
+    if(false == existed)
+    {
+        if(!mpIRDBInstance->createIRDB())
+        {
+            //remove IR database;
+            QFile::remove(IRDBFile);
+            mpIRDBInstance->releaseInstance();	
+        }
+    }
+    return mpIRDBInstance;
+}
+
+void IRDB::releaseInstance()
+{
+    mMutex.lock();
+    if ((--m_RefCnt) == 0)
+    {
+        delete this;
+        mpIRDBInstance = NULL;
+    }
+    mMutex.unlock();
+}
+
+bool IRDB::createIRDB()
+{
+    bool ret = true;
+
+    m_sqlDB = QSqlDatabase::addDatabase("QSQLITE");
+    m_sqlDB.setDatabaseName(IRDBName);		
+		
+    if( !QFile::exists(IRDBFile) )			
+    {
+        mMutex.lock();
+        if(!m_sqlDB.isOpen())
+        {
+            m_sqlDB.open();
+            mMutex.unlock();
+		      
+            ret = createIRTable();
+            m_sqlDB.close();    	
+        }
+        else
+        {
+            mMutex.unlock();
+            ret = false;
+        }
+    }   
+
+    return ret;
+}
+
+bool IRDB::destoryIRDB()  
+{ 
+    bool ret = true;
+    mMutex.lock();
+    if(!m_sqlDB.isOpen())
+    {
+        QFile::remove (IRDBFile);			
+        mMutex.unlock();
+    }
+    else
+    {
+        mMutex.unlock();
+        ret = false;
+    }
+    
+    return ret;
+}
+
+//if the IR database file in disk exists, we don't need to call this function;
+bool IRDB::createIRTable()
+{
+    bool Rlt = true;	
+    
+    QStringList sqlList;
+    QSqlQuery sqlQuery(m_sqlDB);
+ 
+    sqlList<<CREATE_TABEL_IRBUFF<<CREATE_TABEL_CHANNELHISTORY<<CREATE_TABEL_SEARCHRLT<<CREATE_TABEL_CHANNELINFO \
+    <<CREATE_TABEL_URLINFO<<CREATE_TABEL_IMG<<CREATE_TABEL_ADVERTISEMENT<<CREATE_TABEL_SONGHISTORY<<CREATE_TABEL_FAVORITES \
+\
+    <<TRI_INSERT_IRBUFF<<TRI_UPDATE_IRBUFF \
+    <<TRI_INSERT_SEARCHRLT<<TRI_DELETE_SEARCHRLT \
+    <<TRI_INSERT_CHANNELINFO<<TRI_UPDATE_CHANNELINFO<<TRI_DELETE_CHANNELINFO \
+    <<TRI_INSERT_CHANNELHISTORY<<TRI_DELETE_CHANNELHISTORY \
+    <<TRI_INSERT_ADVERTISEMENT<<TRI_UPDATE_ADVERTISEMENT \
+\
+    <<TRI_INSERT_SONGHISTORY<<TRI_UPDATE_SONGHISTORY<<TRI_DELETE_SONGHISTORY \
+    <<TRI_INSERT_FAVORITES<<TRI_UPDATE_FAVORITES<<TRI_DELETE_FAVORITES \
+\
+    <<IRVIEW_CHANNELINFO1<<IRVIEW_CHANNELINFO<<IRVIEW_CHANNELHISTORY<<IR_VIEW_SRH_USERCID \
+    <<IRVIEW_FAVORITES<<IRVIEW_SEARCHRLT<<IRVIEW_SONGHISTORY ;
+
+
+    for(int i = 0; i<sqlList.size();i++)
+    {
+        Rlt = sqlQuery.exec(sqlList.at(i));
+
+        if(Rlt == false)
+        {
+        	  break;
+        }
+    }
+		
+    sqlQuery.clear();
+		
+    //remove string in sqlList;
+    for(int i = 0; i<sqlList.size();i++)
+    {
+        sqlList.removeFirst();
+    }
+		
+    return Rlt;
+}
+
+
+bool IRDB::openIRDBConnection()
+{
+    bool ret = true;
+    mMutex.lock();
+    
+    if(m_sqlDB.isOpen())
+    {
+        ret = false;
+    }
+    else
+    { 
+        ret = m_sqlDB.open();
+    }
+	  
+    mMutex.unlock();
+    return ret;	
+}
+
+
+IRDBCHAR IRDB::chgRowIRDB(QString aInsSqlStr, 
+                          QString aUpdSqlStr, 
+                          uint* const retCid,
+                          const QString& aCondSqlStr, 
+                          const QString& condUserCidStr, 
+                          const QList<QByteArray>* apImgList) 
+{
+    IRDBCHAR ret = IRDB_ERR_NONE;
+    //channelId value 0 don't be used in CIRDB;
+    uint channelId = 0;                     
+    //sql string for search cid according to nickname and url; 
+    QString strSrhCid = IRDBSrhUserCid + condUserCidStr;
+    QString strSrhDataSet = IRDBSrhCIdFrmView + aCondSqlStr;
+    
+    //initialize the channelId for application level;
+    if(retCid)
+    {
+        *retCid = 0;
+    }
+    
+    if(false == openIRDBConnection())
+    {
+        return IRDB_ERR_OPEN;	
+    }
+
+    QSqlQuery iIRQuery(m_sqlDB);
+      
+    if(NULL != condUserCidStr)
+    {
+        if(false == iIRQuery.exec(strSrhCid))
+        {
+            iIRQuery.clear();
+            m_sqlDB.close();
+            ret = IRDB_ERR_SELECT;
+        } 
+        else
+        {
+            iIRQuery.next();
+            channelId = iIRQuery.value(0).toInt();
+        }
+    }
+		
+    if(ret != IRDB_ERR_NONE)
+    {
+        return ret;
+    }
+
+    /*for below case, because it is a channel inputted by user.
+    * Although the channelId can be gotten according to the condstr, 
+    * if the channelId is defined by iSDS, still new user-defined channelId will be allocated.  
+    */
+    if(channelId < IRDB_CID_USER_DEFINE)
+    {
+    	channelId = 0;
+    }
+ 
+    if(0 == channelId )
+    {
+        //new channelId should be allocated.
+        if( false == iIRQuery.exec(IRDBSrhCIdMaxFrmChannelInfo) )
+        {	
+            iIRQuery.clear();
+            m_sqlDB.close();
+            ret = IRDB_ERR_SELECT;        	
+        }   
+        
+        if(ret != IRDB_ERR_NONE)
+        {
+            return ret;
+        }
+		      
+        iIRQuery.next();
+      
+        if(iIRQuery.value(0).toInt()< IRDB_CID_USER_DEFINE )
+        {
+            channelId = (uint)IRDB_CID_USER_DEFINE;
+        }
+        else
+        {
+            channelId = (uint)iIRQuery.value(0).toInt() + 1;
+        }
+        
+        //if a userdefined channelid is created, the value will be returned to application level;
+        if(retCid)
+        {
+            *retCid = channelId;
+        }
+	}
+    else
+	{    
+	    /*
+	    * for case: although channelId can be gotten, but the updSqlStr is invalid, 
+	    * operation should be stopped
+	    */
+        if(false == iIRQuery.exec(strSrhDataSet))
+        {
+            iIRQuery.clear();
+            m_sqlDB.close();
+            ret = IRDB_ERR_SELECT;
+        } 
+        else
+        {
+            iIRQuery.next();
+            if(0 == iIRQuery.value(0).toInt())
+            {
+                iIRQuery.clear();
+                m_sqlDB.close();
+                ret = IRDB_ERR_UPDATE;
+            }
+        }
+    }
+  
+    if(IRDB_ERR_NONE == ret )
+    {
+        iIRQuery.clear();
+
+        aInsSqlStr.insert(aInsSqlStr.indexOf(')'), QString(" ,channelId"));
+        aInsSqlStr.insert(aInsSqlStr.lastIndexOf(')'),QString(" ,")+QString::number(channelId));
+    
+        /* 
+        * Since process will go ahead to call 
+        * EIRDB IRDB::chgRowIRDB(const QString& aInsSqlStr, const QString& aUpdSqlStr, uint channelId, bool bPreHandle),
+        * for the synchoronization concern, the m_sqlDB can't be closed until all the process is compeleted;    
+        * m_sqlDB.close();
+        */
+         ret = chgRowIRDB(aInsSqlStr, aUpdSqlStr, channelId, aCondSqlStr, apImgList,  true);
+    }
+/*    else
+    {
+        iIRQuery.clear();
+        m_sqlDB.close();
+    }
+*/    
+    return ret;
+}
+    
+
+
+// if the action invoked from 'go to station view', don't use this function
+IRDBCHAR IRDB::chgRowIRDB(const QString& aInsSqlStr, 
+                          const QString& aUpdSqlStr, 
+                          const uint& channelId, 
+                          const QString& aCondSqlStr, 
+                          const QList<QByteArray>* apImgList,
+                          bool bPreHandle)
+{
+    IRDBCHAR ret = IRDB_ERR_NONE;
+    QString strIsCIDExist = IRDBSrhCIdCntFrmChannelInfo + QString::number(channelId) +";";
+    QString updSqlStr;
+    
+    /*
+    * if the function call isn't invoked from 
+    * EIRDB IRDB::chgRowIRDB(QString aInsSqlStr, QString aUpdSqlStr, const QString& aCondStr),
+    * db connection should be opened again;
+    */  
+    if(false == bPreHandle)
+    {
+        if(false == openIRDBConnection())
+        {
+            return IRDB_ERR_OPEN;	
+        }
+    }
+    
+    QSqlQuery iIRQuery(m_sqlDB);  
+
+    /*If channelId isn't 0, then two cases should be checked.
+	  * First, if channelId  exists in the channelInfo, update operation will be excuted.
+	  * Second, if channelId doesn't exists in channelInfo table, insert operation will be excuted.
+    */
+    if(false == iIRQuery.exec(strIsCIDExist))
+    {
+        iIRQuery.clear();
+        m_sqlDB.close();
+        return IRDB_ERR_SELECT;
+    } 
+		  
+    iIRQuery.next();    
+    
+    /*if channelID existed, we need to get the preset data*/
+    if (0 != iIRQuery.value(0).toInt())
+    {
+        /*trigger the action, 
+        * All the data recorded in CiRDB, its channelID equal to here ,
+        * will be composed to one row in IRBuff table; 
+        */ 
+        if(false == iIRQuery.exec(IRDBInsertIRBuff + QString::number(channelId)+",1, 2)"))
+        {
+            ret = IRDB_ERR_INSERT;            
+        } 
+        else
+        {
+            if(aCondSqlStr.isEmpty())
+            {
+                updSqlStr = aUpdSqlStr  + " where channelId = " + QString::number(channelId);
+            }
+            else
+            {
+                updSqlStr += aCondSqlStr;
+            }
+            if(NULL == apImgList)
+            {
+                if(false == iIRQuery.exec(aUpdSqlStr))
+		        {
+		            ret = IRDB_ERR_UPDATE;        	
+		        }
+            }
+            else
+            {            
+                iIRQuery.prepare(aUpdSqlStr);
+                iIRQuery.bindValue(strBLogo, apImgList->at(bLogoInsert));
+                iIRQuery.bindValue(strSLogo, apImgList->at(sLogoInsert));
+                if(false == iIRQuery.exec())
+                {
+                    ret = IRDB_ERR_UPDATE;
+                }
+            }
+		    
+		}	
+    }
+    else /*since there is not uid, we insert directly*/
+    {   
+        if(NULL == apImgList)
+        {
+            if(false == iIRQuery.exec(aInsSqlStr))
+            {
+                ret = IRDB_ERR_INSERT;
+            }
+        }
+        else
+        {
+            iIRQuery.prepare(aInsSqlStr);
+            iIRQuery.bindValue(strBLogo, apImgList->at(bLogoInsert));
+            iIRQuery.bindValue(strSLogo, apImgList->at(sLogoInsert));
+            if(false == iIRQuery.exec())
+            {
+                ret = IRDB_ERR_UPDATE;
+            }        
+        }
+    }
+ 
+    iIRQuery.clear();
+    m_sqlDB.close();
+
+    return ret;
+}
+
+IRDBCHAR IRDB::chgRowSongHistory(const QString& aInsSqlStr, 
+                                 const QString& aUpdSqlStr, 
+                                 const QString& aCondSqlStr, 
+                                 const QString& aSongName, 
+                                 const uint& channelId)
+{
+    QString strSltRecordFromSongHistory = IRDBSrhRecordCntFrmSongHistory + aCondSqlStr;
+    QString updStr;
+    bool bDone = false;
+    IRDBCHAR ret = IRDB_ERR_NONE;
+    
+    
+    if( (aSongName.isEmpty()) || (0 == channelId) )
+    {
+        return IRDB_ERR_ILLEGAL;
+    }
+
+    if(IRDB_CID_EXISTED != isChannelIdExisted(channelId))
+    {
+        return IRDB_ERR_ILLEGAL;
+    }    
+    
+    if(false == openIRDBConnection())
+    {
+        return IRDB_ERR_OPEN;   
+    }
+    
+    QSqlQuery iIRQuery(m_sqlDB);  
+    
+    //if update string is true, first excute update string;
+    if(false == aCondSqlStr.isEmpty())
+    {
+        if(false == iIRQuery.exec(strSltRecordFromSongHistory))
+        {
+            iIRQuery.clear();
+            m_sqlDB.close();
+            return IRDB_ERR_SELECT;
+        } 
+  
+        iIRQuery.next();  
+        if (0 != iIRQuery.value(0).toInt())
+        {
+            /*
+            * if row can be selected from songHistory Table,
+            * it is a stirng which is to be updated. 
+            */
+            bDone = true;
+            updStr = aUpdSqlStr + aCondSqlStr;
+            if( false == iIRQuery.exec(updStr) )
+            {
+                ret = IRDB_ERR_INSERT;
+            }          
+        }
+    }
+    
+    if(false == bDone)
+    {
+        if(false == iIRQuery.exec(aInsSqlStr))
+        {
+            ret = IRDB_ERR_UPDATE;
+        }     
+    }
+
+    iIRQuery.clear();
+    m_sqlDB.close();
+    
+    return ret;
+    
+}
+
+
+IRDBCHAR IRDB::isChannelIdExisted(uint channelId)
+{
+    QString strIsCIDExist = IRDBSrhCIdCntFrmChannelInfo + QString::number(channelId);
+    IRDBCHAR ret = IRDB_ERR_NONE;
+    
+    if(0 == channelId)
+    {
+        return IRDB_CID_UNEXISTED;
+    }    
+  
+    if(false == openIRDBConnection())
+    {
+        return IRDB_ERR_OPEN;   
+    }
+
+    QSqlQuery iIRQuery(m_sqlDB);  
+    
+    //iIRQuery.clear();
+    if(false == iIRQuery.exec(strIsCIDExist))
+    {
+            ret = IRDB_ERR_SELECT; 
+    }
+    else
+    {
+        iIRQuery.next();  
+        if(0 != iIRQuery.value(0).toInt())
+        {
+            ret = IRDB_CID_EXISTED;
+        }
+    }
+
+    iIRQuery.clear();
+    m_sqlDB.close();
+
+    return ret ;    
+}
+
+IRDBCHAR IRDB::chgRowFavorites(const QString& aInsSqlStr, const QString& aUpdSqlStr, const uint& channelId, bool& bNewRow)
+{
+    IRDBCHAR ret = IRDB_ERR_NONE;
+    QString strIsCIDExist = IRDBSrhCIdCntFrmChannelInfo + QString::number(channelId) +";";
+    QString strIsCIDFavorites = IRDBSrhCIdCntFrmFavorites + QString::number(channelId) +";";
+    QString updSqlStr = aUpdSqlStr + "where channelid = " + QString::number(channelId);
+    
+    if(false == openIRDBConnection())
+    {
+        return IRDB_ERR_OPEN;	
+    }
+
+    QSqlQuery iIRQuery(m_sqlDB);  
+    
+    if(false == iIRQuery.exec(strIsCIDExist))
+    {
+        iIRQuery.clear();
+        m_sqlDB.close();
+        ret = IRDB_ERR_SELECT;
+    } 
+    
+    if(ret != IRDB_ERR_NONE)
+    {
+        return ret;
+    }
+		  
+    iIRQuery.next();  
+   
+    /*if channelID existed in channelInfo*/
+    if (0 != iIRQuery.value(0).toInt())
+    {
+        if(false != iIRQuery.exec(strIsCIDFavorites))
+        {
+        	//if this channelId is in Favorties, this is a row need to update;
+            iIRQuery.next();  
+            if(0 != iIRQuery.value(0).toInt())
+            {
+        	      bNewRow = false;	
+        	    
+                if( false == iIRQuery.exec(updSqlStr) )
+                {
+                    ret = IRDB_ERR_UPDATE;
+                }        		
+            }
+            else //this is a new row which need to be insert favorites;
+            {
+                bNewRow = true;	
+                
+                if( false == iIRQuery.exec(aInsSqlStr) )
+                {
+                    ret = IRDB_ERR_INSERT;
+                }            		
+            }
+        }
+        else
+        {
+            ret = IRDB_ERR_SELECT;
+        }	
+    }
+    else /*channelId don't be recorded in channelinfo, illegal data*/
+    {
+        ret = IRDB_ERR_ILLEGAL;
+    }
+     
+    iIRQuery.clear();
+    m_sqlDB.close();
+   
+    return ret ;
+}
+
+
+IRDBCHAR IRDB::deleteRow(const QString& aDltSqlStr)
+{
+    IRDBCHAR ret = IRDB_ERR_NONE;
+    
+    /*rows in channelInfo and img can't be removed directly.*/    
+    if( 0 == QString::compare("channelInfo", aDltSqlStr, Qt::CaseInsensitive) )
+    {
+    	return IRDB_ERR_DELETE;
+    }
+    
+    if( 0 == QString::compare("img", aDltSqlStr, Qt::CaseInsensitive) )
+    {
+    	return IRDB_ERR_DELETE; 
+    }
+    
+    if(false == openIRDBConnection())
+    {
+        return IRDB_ERR_OPEN;	
+    }
+
+    QSqlQuery iIRQuery(m_sqlDB);  
+    if(false == iIRQuery.exec(aDltSqlStr))
+    {
+        ret = IRDB_ERR_DELETE;
+    }
+    
+    iIRQuery.clear();
+    m_sqlDB.close();
+    
+    return ret;
+}
+
+IRDBCHAR IRDB::selectRowIRDB(IRDBWrapper* const apWrapper, const QString& aCondStr, bool bIsSrhCid, 
+                             QList<uint>* pQListCIDSet, QList<QVariant*>* pIRDataSet)
+{
+    QString strSrhCid;
+    IRDBCHAR ret = IRDB_ERR_NONE;   
+
+    if(true == bIsSrhCid)
+    {
+        strSrhCid = IRDBSrhCIdFrmView + aCondStr;  
+    }
+    else
+    {
+        strSrhCid = IRDBSrhAllFrmView + aCondStr;
+    } 
+    
+    if(false == openIRDBConnection())
+    {
+        return IRDB_ERR_OPEN;   
+    }
+ 
+    QSqlQuery iIRQuery(m_sqlDB);  
+
+
+    if(false == iIRQuery.exec(strSrhCid))
+    {
+        iIRQuery.clear();
+        m_sqlDB.close();
+        ret = IRDB_ERR_SELECT;      
+    }
+
+    if(ret != IRDB_ERR_NONE)
+    {
+        return ret;
+    }  
+        
+    if(!apWrapper)
+    {
+        iIRQuery.clear();
+        m_sqlDB.close();
+        ret = IRDB_ERR_SELECT;      
+    }
+
+    if(true == bIsSrhCid)
+    {
+        if(false == apWrapper->loadDataOfChannelIdCB(iIRQuery, pQListCIDSet))
+        {
+            ret = IRDB_ERR_WRAPPER;
+        } 
+    }
+    else
+    {
+        if(false == apWrapper->loadDataOfIRDBCB(iIRQuery, pIRDataSet))
+        {
+            ret = IRDB_ERR_WRAPPER;
+        } 
+    } 
+
+    iIRQuery.clear();
+    m_sqlDB.close();
+ 
+    return ret; 
+}
+
+IRDBCHAR IRDB::selectRow(IRDBWrapper* const apWrapper, const QString& aCondStr, QList<QVariant*>* pDataSet)
+{
+    IRDBCHAR ret = IRDB_ERR_NONE;   
+    
+    if(!apWrapper)
+    {
+        ret = IRDB_ERR_SELECT;      
+    }
+    
+    if(false == openIRDBConnection())
+    {
+        return IRDB_ERR_OPEN;   
+    }
+ 
+    QSqlQuery iIRQuery(m_sqlDB);  
+
+
+    if(false == iIRQuery.exec(aCondStr))
+    {
+        iIRQuery.clear();
+        m_sqlDB.close();
+        ret = IRDB_ERR_SELECT;      
+    }
+
+    if(ret != IRDB_ERR_NONE)
+    {
+        return ret;
+    }  
+        
+    if(false == apWrapper->getIRTableCB(iIRQuery, pDataSet))
+    {
+            ret = IRDB_ERR_WRAPPER;
+    } 
+        
+
+    iIRQuery.clear();
+    m_sqlDB.close();
+ 
+    return ret; 
+}
+
+/*
+* INSERT/DELETE row, in urlInfo table;
+* step:
+* 1/ first delete all the rows whose channelID equals to input channelId,
+* 2/ insert all the rows belonged to one channelId to urlinfo
+*/
+IRDBCHAR IRDB::resetUrlInfo(const QStringList& aInsSqlList, const uint& channelId)
+{
+    QString strDltRow = IRDBDltRowFrmUrlInfoByCId + QString::number(channelId) +";";
+    QString strIsCIDExist = IRDBSrhCIdCntFrmChannelInfo + QString::number(channelId) +";";
+    	
+    IRDBCHAR ret = IRDB_ERR_NONE;	
+
+    if(false == openIRDBConnection())
+    {
+        return IRDB_ERR_OPEN;	
+    }
+ 
+    QSqlQuery iIRQuery(m_sqlDB);  
+
+    if(false == iIRQuery.exec(strIsCIDExist))
+    {
+        iIRQuery.clear();
+        m_sqlDB.close();
+        return IRDB_ERR_SELECT;    	
+    }
+    
+    iIRQuery.next();  
+   
+    /*if channelID existed in channelInfo*/
+    if (0 != iIRQuery.value(0).toInt())
+    {
+        if(false == iIRQuery.exec(strDltRow))
+        {
+            ret = IRDB_ERR_DELETE;    	
+        }
+        else
+        {
+            for(int i = 0; i<aInsSqlList.size();i++)
+            {
+                if(false == iIRQuery.exec(aInsSqlList.at(i)) )
+                {
+                    ret = IRDB_ERR_INSERT;
+                    break;	
+                }
+            }  		    	
+         }    	
+    }
+    else
+    {
+        ret = IRDB_ERR_ILLEGAL;	
+    }
+    
+    iIRQuery.clear();
+    m_sqlDB.close();
+           
+    return ret;	
+}
+
+/*
+* only update imgUrl, imgLocalFile in img table; 
+*/
+IRDBCHAR IRDB::updRowImg(const uint& channelId, const QString& updSqlStr, QList<QByteArray>* apImgList)
+{
+    QString strIsCIDExist = IRDBSrhCIdCntFrmChannelInfo + QString::number(channelId) +";";    
+    IRDBCHAR ret = IRDB_ERR_NONE;   
+
+    if(false == openIRDBConnection())
+    {
+        return IRDB_ERR_OPEN;   
+    }
+ 
+    QSqlQuery iIRQuery(m_sqlDB);  
+
+    if(false == iIRQuery.exec(strIsCIDExist))
+    {
+        iIRQuery.clear();
+        m_sqlDB.close();
+        return IRDB_ERR_SELECT;     
+    }
+    
+    iIRQuery.next();  
+
+    /*if channelID existed in channelInfo*/
+    if (0 != iIRQuery.value(0).toInt())
+    {
+        if(NULL == apImgList)
+        {
+            if(false == iIRQuery.exec(updSqlStr))
+            {
+                ret = IRDB_ERR_UPDATE;          
+            }
+        }
+        else
+        {            
+            iIRQuery.prepare(updSqlStr);
+            iIRQuery.bindValue(strBLogo, apImgList->at(bLogoInsert));
+            iIRQuery.bindValue(strSLogo, apImgList->at(sLogoInsert));
+            if(false == iIRQuery.exec())
+            {
+                ret = IRDB_ERR_UPDATE;
+            }
+        }    
+    }
+    else
+    {
+        ret = IRDB_ERR_ILLEGAL; 
+    }
+    
+    iIRQuery.clear();
+    m_sqlDB.close();
+           
+    return ret; 
+    
+}
+
+IRDBCHAR IRDB::updRowChannelHistory(const uint& aChannelId)
+{
+    QString strIsCIDExist = IRDBSrhCIdCntFrmChannelHistory + QString::number(aChannelId) + ";";
+    QString updStr = "update channelHistory set channelId = " + QString::number(aChannelId) + "where channelId = " + QString::number(aChannelId) +";";
+    IRDBCHAR ret = IRDB_ERR_NONE;	
+
+    if(false == openIRDBConnection())
+    {
+        return IRDB_ERR_OPEN;	
+    }
+ 
+    //if channelId isn't in channelHistory, return;
+    QSqlQuery iIRQuery(m_sqlDB);  
+
+    if(false == iIRQuery.exec(strIsCIDExist))
+    {
+        iIRQuery.clear();
+        m_sqlDB.close();
+        return IRDB_ERR_SELECT;    	
+    }
+    
+    iIRQuery.next();  
+   
+    /*if channelID existed in channelHistory*/
+    if (0 != iIRQuery.value(0).toInt())
+    {
+        if(false == iIRQuery.exec(updStr))
+        {
+            ret = IRDB_ERR_DELETE;    	
+        }    	
+    }
+    else
+    {
+        ret = IRDB_ERR_ILLEGAL;
+    }
+
+    return ret;
+}
+
+