本文整理汇总了C++中Query::done方法的典型用法代码示例。如果您正苦于以下问题:C++ Query::done方法的具体用法?C++ Query::done怎么用?C++ Query::done使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Query
的用法示例。
在下文中一共展示了Query::done方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: execute
void execute()
{
if ( q && !q->done() )
return;
if ( q && q->done() && !p ) {
Row * r = q->nextRow();
q = 0;
if ( !r )
quit( EX_NOUSER, "No such user: " + un );
if ( !r->isNull( "login" ) &&
r->getEString( "login" ) == "anonymous" )
quit( EX_DATAERR, "Cannot deliver to the anonymous user" );
if ( mbn.isEmpty() ) {
mb = Mailbox::find( r->getInt( "mailbox" ) );
}
else {
UString pre;
if ( !r->isNull( "namespace" ) && !mbn.startsWith( "/" ) )
pre = r->getUString( "namespace" ) + "/" +
r->getUString( "login" ) + "/";
mb = Mailbox::find( pre + mbn );
User * u = new User;
UString anyone;
anyone.append( "anyone" );
u->setLogin( anyone );
if ( mb )
p = new Permissions( mb, u, this );
}
if ( !mb )
quit( EX_CANTCREAT, "No such mailbox" );
}
if ( p && !p->ready() )
return;
if ( p && !p->allowed( Permissions::Post ) )
quit( EX_NOPERM,
"User 'anyone' does not have 'p' right on mailbox " +
mbn.ascii().quoted( '\'' ) );
if ( !i ) {
EStringList x;
m->setFlags( mb, &x );
i = new Injector( this );
List<Injectee> y;
y.append( m );
i->addInjection( &y );
i->execute();
}
if ( !i->done() )
return;
if ( i->failed() )
quit( EX_SOFTWARE, "Injection error: " + i->error() );
i = 0;
EventLoop::shutdown();
}
示例2: execute
void MailboxReader::execute() {
while ( q->hasResults() ) {
Row * r = q->nextRow();
UString n = r->getUString( "name" );
uint id = r->getInt( "id" );
Mailbox * m = ::mailboxes->find( id );
if ( !m || m->name() != n ) {
m = Mailbox::obtain( n );
if ( n != m->d->name )
m->d->name = n;
m->setId( id );
::mailboxes->insert( id, m );
}
if ( r->getBoolean( "deleted" ) )
m->setType( Mailbox::Deleted );
else
m->setType( Mailbox::Ordinary );
uint uidvalidity = r->getInt( "uidvalidity" );
if ( m->d->uidvalidity != uidvalidity ) {
m->d->uidvalidity = uidvalidity;
m->abortSessions();
}
if ( !r->isNull( "owner" ) )
m->setOwner( r->getInt( "owner" ) );
m->setUidnextAndNextModSeq( r->getInt( "uidnext" ),
r->getBigint( "nextmodseq" ),
q->transaction() );
m->setFlag( r->getEString( "flag" ) );
}
if ( !q->done() || done )
return;
done = true;
if ( q->transaction() )
q->transaction()->commit();
::readers->remove( this );
::wiped = false;
if ( q->failed() && !EventLoop::global()->inShutdown() ) {
List<Mailbox> * c = Mailbox::root()->children();
if ( c && !c->isEmpty() )
log( "Couldn't update mailbox tree: " + q->error() );
else
log( "Couldn't create mailbox tree: " + q->error(),
Log::Disaster );
}
if ( owner )
owner->execute();
};
示例3: execute
void execute()
{
if ( !q ) {
q = new Query( "select not exists (select * from "
"information_schema.table_privileges where "
"privilege_type='DELETE' and table_name="
"'messages' and grantee=$1) and not exists "
"(select u.usename from pg_catalog.pg_class c "
"left join pg_catalog.pg_user u on "
"(u.usesysid=c.relowner) where c.relname="
"'messages' and u.usename=$1) as allowed",
this );
q->bind( 1, Configuration::text( Configuration::DbUser ) );
q->execute();
}
if ( !q->done() )
return;
Row * r = q->nextRow();
if ( q->failed() || !r ||
r->getBoolean( "allowed" ) == false )
{
EString s( "Refusing to start because we have too many "
"privileges on the messages table in secure "
"mode." );
result->setError( s );
l->log( s, Log::Disaster );
if ( q->failed() ) {
l->log( "Query: " + q->description(), Log::Disaster );
l->log( "Error: " + q->error(), Log::Disaster );
}
}
else {
result->setState( Query::Completed );
}
result->notify();
}
示例4: execute
void execute()
{
if ( !r ) {
r = new RetentionSelector( mailbox, this );
r->execute();
}
if ( !t ) {
t = new ::Transaction( this );
nms = new Query( "select nextmodseq from mailboxes "
"where id=$1 for update", this );
nms->bind( 1, mailbox->id() );
t->enqueue( nms );
t->execute();
}
if ( nms ) {
if ( !r->done() )
return;
if ( !nms->done() )
return;
ms = nms->nextRow()->getBigint( "nextmodseq" );
nms = 0;
Selector * s = new Selector;
if ( r->retains() ) {
Selector * n = new Selector( Selector::Not );
s->add( n );
n->add( r->retains() );
}
s->add( new Selector( this->s ) );
s->simplify();
EStringList wanted;
wanted.append( "mailbox" );
wanted.append( "uid" );
wanted.append( "message" );
iq = s->query( 0, mailbox, 0, this, false,
&wanted, false );
int i = iq->string().find( " from " );
uint msb = s->placeHolder();
uint ub = s->placeHolder();
uint rb = s->placeHolder();
iq->setString(
"insert into deleted_messages "
"(mailbox,uid,message,modseq,deleted_by,reason) " +
iq->string().mid( 0, i ) + ", $" + fn( msb ) +", $" +
fn( ub ) + ", $" + fn( rb ) + iq->string().mid( i ) );
iq->bind( msb, ms );
iq->bind( ub, user->id() );
iq->bind( rb,
"POP delete " + Scope::current()->log()->id() );
t->enqueue( iq );
t->execute();
}
if ( iq ) {
if ( !iq->done() )
return;
if ( iq->rows() ) {
// at least one message was deleted
Query * q = new Query( "update mailboxes set "
"nextmodseq=$1 where id=$2",
this );
q->bind( 1, ms+1 );
q->bind( 2, mailbox->id() );
t->enqueue( q );
Mailbox::refreshMailboxes( t );
}
iq = 0;
t->commit();
}
if ( !t->done() )
return;
if ( t->failed() )
log( "Error deleting messages: " + t->error() );
}