void gcd_api_cancel( GCD_PCB *pcb ) { pcb->api.name = "IIapi_cancel()"; pcb->api.parm.cancel.cn_genParm.gp_callback = gcd_cncl_cmpl; pcb->api.parm.cancel.cn_genParm.gp_closure = (PTR)pcb; pcb->api.parm.cancel.cn_stmtHandle = pcb->ccb->api.stmt; if ( pcb->api.parm.cancel.cn_stmtHandle ) IIapi_cancel( &pcb->api.parm.cancel ); else { /* ** There was no statement to cancel. ** No error is returned in this case. */ pcb->api_status = IIAPI_ST_SUCCESS; pcb->api_error = OK; gcd_pop_callback( pcb ); } return; }
int main( int argc, char** argv ) { II_PTR connHandle = (II_PTR)NULL; II_PTR tranHandle = (II_PTR)NULL; II_PTR stmtHandle = (II_PTR)NULL; IIAPI_QUERYPARM queryParm; IIAPI_GETDESCRPARM getDescrParm; IIAPI_GETCOLPARM getColParm; IIAPI_CLOSEPARM closeParm; IIAPI_CANCELPARM cancelParm; IIAPI_WAITPARM waitParm = { -1 }; IIAPI_DATAVALUE DataBuffer[ 1 ]; int i; char var1[33]; if ( argc != 2 ) { printf( "usage: apissell [vnode::]dbname[/server_class]\n" ); exit( 0 ); } IIdemo_init(); IIdemo_conn(argv[1],&connHandle); /* ** Issue query */ printf( "apissell: select table names\n" ); queryParm.qy_genParm.gp_callback = NULL; queryParm.qy_genParm.gp_closure = NULL; queryParm.qy_connHandle = connHandle; queryParm.qy_queryType = IIAPI_QT_QUERY; queryParm.qy_queryText = queryText; queryParm.qy_parameters = FALSE; queryParm.qy_tranHandle = tranHandle; queryParm.qy_stmtHandle = NULL; IIapi_query( &queryParm ); while( queryParm.qy_genParm.gp_completed == FALSE ) IIapi_wait( &waitParm ); tranHandle = queryParm.qy_tranHandle; stmtHandle = queryParm.qy_stmtHandle; /* ** Get query result descriptors */ printf( "apissell: get descriptors\n" ); getDescrParm.gd_genParm.gp_callback = NULL; getDescrParm.gd_genParm.gp_closure = NULL; getDescrParm.gd_stmtHandle = stmtHandle; getDescrParm.gd_descriptorCount = 0; getDescrParm.gd_descriptor = NULL; IIapi_getDescriptor( &getDescrParm ); while( getDescrParm.gd_genParm.gp_completed == FALSE ) IIapi_wait( &waitParm ); /* ** Get query results */ printf( "apissell: get results\n" ); getColParm.gc_genParm.gp_callback = NULL; getColParm.gc_genParm.gp_closure = NULL; getColParm.gc_rowCount = 1; getColParm.gc_columnCount = 1; getColParm.gc_rowsReturned = 0; getColParm.gc_columnData = DataBuffer; getColParm.gc_columnData[0].dv_value = var1; getColParm.gc_stmtHandle = stmtHandle; getColParm.gc_moreSegments = 0; for( i = 0; i < 5; i++ ) { IIapi_getColumns( &getColParm ); while( getColParm.gc_genParm.gp_completed == FALSE ) IIapi_wait( &waitParm ); if ( getColParm.gc_genParm.gp_status >= IIAPI_ST_NO_DATA ) break; var1[ DataBuffer[0].dv_length ] = '\0'; printf( "\t%s = %s \n", getDescrParm.gd_descriptor[0].ds_columnName, var1 ); }; /* ** Cancel query processing. */ printf( "apissell: cancel query\n" ); cancelParm.cn_genParm.gp_callback = NULL; cancelParm.cn_genParm.gp_closure = NULL; cancelParm.cn_stmtHandle = stmtHandle; IIapi_cancel(&cancelParm ); while( cancelParm.cn_genParm.gp_completed == FALSE ) IIapi_wait( &waitParm); /* ** Free query resources. */ printf( "apissell: free query resources\n" ); closeParm.cl_genParm.gp_callback = NULL; closeParm.cl_genParm.gp_closure = NULL; closeParm.cl_stmtHandle = stmtHandle; IIapi_close( &closeParm ); while( closeParm.cl_genParm.gp_completed == FALSE ) IIapi_wait( &waitParm ); IIdemo_rollback(&tranHandle); IIdemo_disconn(&connHandle); IIdemo_term(); return( 0 ); }