int SP_NKPop3Client :: getAllUidList( SP_NKPop3UidList * uidList ) { SP_NKStringList buffer; int ret = mPop3->uidl( &buffer ); if( 0 == ret ) { const char * strBuf = buffer.getItem(0); for( const char * iter = strBuf; NULL != iter; ) { char line[ 256 ] = { 0 }; SP_NKStr::strlcpy( line, iter, sizeof( line ) ); if( '.' == line[0] ) break; char * pos = strchr( line, '\n' ); if( NULL != pos ) { *pos = '\0'; if( pos > line && '\r' == *( pos - 1 ) ) *( pos - 1 ) = '\0'; } pos = strchr( line, ' ' ); if( NULL == pos ) continue; pos++; SP_NKPop3Uid * uid = new SP_NKPop3Uid( pos, atoi( line ) ); uidList->append( uid ); iter = strchr( iter, '\n' ); if( NULL != iter ) iter++; } } return ret; }
int SP_HiveTableSchema :: init( sqlite3 * handle, const char * tableName, const char * ddl ) { mDDL = strdup( ddl ); mTableName = strdup( tableName ); mColumnList = new SP_NKNameValueList(); spsqlite_column_t * columns = NULL; int dbRet = spsqlite_table_columns_get( handle, tableName, &columns ); if( 0 != dbRet ) { SP_NKLog::log( LOG_ERR, "ERR: spsqlite_table_columns_get %d", dbRet ); spsqlite_table_columns_free( &columns ); return -1; } spsqlite_column_t * iter = columns; for( ; NULL != iter; iter = iter->next ) { SP_NKStringList columnDefine; columnDefine.append( iter->name ); columnDefine.append( " " ); columnDefine.append( iter->type ); columnDefine.append( " " ); if( iter->notNull ) { columnDefine.append( "not null" ); } if( iter->defval ) { if( '\0' == *iter->defval ) { columnDefine.append( "default \"\"" ); } else { columnDefine.append( "default " ); columnDefine.append( iter->defval ); } } char * value = columnDefine.getMerge(); mColumnList->add( iter->name, value ); free( value ); } spsqlite_table_columns_free( &columns ); return 0; }
int SP_HiveSchemaManager :: alterTable( sqlite3 * handle, SP_HiveTableSchema * newTable, SP_HiveTableSchema * oldTable ) { SP_NKStringList newColumnList; for( int i = 0; i < newTable->getColumnCount(); i++ ) { const char * name = newTable->getColumnName( i ); int index = oldTable->findColumn( name ); if( index < 0 ) newColumnList.append( newTable->getColumnDefine( i ) ); } int ret = 0; if( newColumnList.getCount() > 0 ) { for( int i = 0; 0 == ret && i < newColumnList.getCount(); i++ ) { SP_NKLog::log( LOG_DEBUG, "DEBUG: %s add column %s", oldTable->getTableName(), newColumnList.getItem( i ) ); char sql[ 1024 ] = { 0 }; snprintf( sql, sizeof( sql ), "alter table %s add column %s;", oldTable->getTableName(), newColumnList.getItem( i ) ); ret = execWithLog( handle, sql ); } } return ret; }
int SP_NKPop3Client :: fillMailSize( SP_NKPop3UidList * uidList ) { SP_NKStringList buffer; int ret = mPop3->list( &buffer ); if( 0 == ret ) { const char * strBuf = buffer.getItem(0); for( const char * iter = strBuf; NULL != iter; ) { char line[ 256 ] = { 0 }; SP_NKStr::strlcpy( line, iter, sizeof( line ) ); if( '.' == line[0] ) break; char * pos = strchr( line, '\n' ); if( NULL != pos ) { *pos = '\0'; if( pos > line && '\r' == *( pos - 1 ) ) *( pos - 1 ) = '\0'; } pos = strchr( line, ' ' ); if( NULL == pos ) continue; pos++; const SP_NKPop3Uid * uid = uidList->find( atoi( line ) ); if( NULL != uid ) { ((SP_NKPop3Uid*)uid)->setSize( atoi( pos ) ); } iter = strchr( iter, '\n' ); if( NULL != iter ) iter++; } } return ret; }
int main( int argc, char * argv[] ) { SP_NKLog::init4test( "testcli" ); SP_NKLog::setLogLevel( LOG_DEBUG ); char * host = NULL, * port = NULL, * type = NULL; char * dbfile = NULL, * user = NULL, * dbname = NULL, * sql = NULL; extern char *optarg ; int c ; while( ( c = getopt( argc, argv, "h:p:t:i:u:n:s:ov" ) ) != EOF ) { switch ( c ) { case 'h' : host = optarg; break; case 'p' : port = optarg; break; case 't' : type = optarg; break; case 'i' : dbfile = optarg; break; case 'u' : user = optarg; break; case 'n' : dbname = optarg; break; case 's' : sql = optarg; break; case 'o' : SP_NKSocket::setLogSocketDefault( 1 ); break; case 'v' : default: showUsage( argv[ 0 ] ); break; } } if( NULL == host || NULL == host || NULL == dbfile || NULL == user || NULL == dbname || NULL == sql ) { showUsage( argv[ 0 ] ); } SP_NKStringList sqlList; { sql = strdup( sql ); for( char * pos = sql; NULL != pos && '\0' != *pos; ) { char * next = strchr( pos, ';' ); if( NULL != next ) *next = '\0'; for( ; isspace( *pos ); ) pos++; if( '\0' != *pos ) sqlList.append( pos ); pos = next ? next + 1 : NULL; } free( sql ); } int rpcType = SP_HiveDBClientConfig::eJsonRpc; if( NULL != type && 0 == strcasecmp( type, "protobuf" ) ) { rpcType = SP_HiveDBClientConfig::eProtoBufRpc; } SP_NKTcpSocket socket( host, atoi( port ) ); SP_HiveDBProtocol protocol( &socket, 0, rpcType ); SP_HiveRespObject * resp = protocol.execute( atoi( dbfile ), user, dbname, &sqlList ); if( NULL != resp ) { if( 0 == resp->getErrorCode() ) { printf( "result.count %d\n", resp->getResultCount() ); for( int i = 0; i < resp->getResultCount(); i++ ) { SP_HiveResultSet * rs = resp->getResultSet( i ); printResultSet( rs ); delete rs; } } else { printf( "execute fail, errcode %d, %s\n", resp->getErrdataCode(), resp->getErrdataMsg() ); } delete resp; } else { printf( "socket error\n" ); } return 0; }