void input_item_SetURI( input_item_t *p_i, const char *psz_uri ) { vlc_mutex_lock( &p_i->lock ); free( p_i->psz_uri ); p_i->psz_uri = strdup( psz_uri ); GuessType( p_i ); if( !p_i->psz_name && p_i->i_type == ITEM_TYPE_FILE ) { const char *psz_filename = strrchr( p_i->psz_uri, DIR_SEP_CHAR ); if( psz_filename && *psz_filename == DIR_SEP_CHAR ) psz_filename++; if( psz_filename && *psz_filename ) p_i->psz_name = strdup( psz_filename ); } /* The name is NULL: fill it with everything except login and password */ if( !p_i->psz_name ) { int r; vlc_url_t url; vlc_UrlParse( &url, psz_uri, 0 ); if( url.psz_protocol ) { if( url.i_port > 0 ) r=asprintf( &p_i->psz_name, "%s://%s:%d%s", url.psz_protocol, url.psz_host, url.i_port, url.psz_path ? url.psz_path : "" ); else r=asprintf( &p_i->psz_name, "%s://%s%s", url.psz_protocol, url.psz_host ? url.psz_host : "", url.psz_path ? url.psz_path : "" ); } else { if( url.i_port > 0 ) r=asprintf( &p_i->psz_name, "%s:%d%s", url.psz_host, url.i_port, url.psz_path ? url.psz_path : "" ); else r=asprintf( &p_i->psz_name, "%s%s", url.psz_host, url.psz_path ? url.psz_path : "" ); } vlc_UrlClean( &url ); if( -1==r ) p_i->psz_name=NULL; /* recover from undefined value */ } vlc_mutex_unlock( &p_i->lock ); }
void input_item_SetURI( input_item_t *p_i, const char *psz_uri ) { assert( psz_uri ); #ifndef NDEBUG if( !strstr( psz_uri, "://" ) || strchr( psz_uri, ' ' ) || strchr( psz_uri, '"' ) ) fprintf( stderr, "Warning: %s(\"%s\"): file path instead of URL.\n", __func__, psz_uri ); #endif vlc_mutex_lock( &p_i->lock ); free( p_i->psz_uri ); p_i->psz_uri = strdup( psz_uri ); p_i->i_type = GuessType( p_i ); if( p_i->psz_name ) ; else if( p_i->i_type == ITEM_TYPE_FILE || p_i->i_type == ITEM_TYPE_DIRECTORY ) { const char *psz_filename = strrchr( p_i->psz_uri, '/' ); if( psz_filename && *psz_filename == '/' ) psz_filename++; if( psz_filename && *psz_filename ) p_i->psz_name = strdup( psz_filename ); /* Make the name more readable */ if( p_i->psz_name ) { decode_URI( p_i->psz_name ); EnsureUTF8( p_i->psz_name ); } } else { /* Strip login and password from title */ int r; vlc_url_t url; vlc_UrlParse( &url, psz_uri, 0 ); if( url.psz_protocol ) { if( url.i_port > 0 ) r=asprintf( &p_i->psz_name, "%s://%s:%d%s", url.psz_protocol, url.psz_host, url.i_port, url.psz_path ? url.psz_path : "" ); else r=asprintf( &p_i->psz_name, "%s://%s%s", url.psz_protocol, url.psz_host ? url.psz_host : "", url.psz_path ? url.psz_path : "" ); } else { if( url.i_port > 0 ) r=asprintf( &p_i->psz_name, "%s:%d%s", url.psz_host, url.i_port, url.psz_path ? url.psz_path : "" ); else r=asprintf( &p_i->psz_name, "%s%s", url.psz_host, url.psz_path ? url.psz_path : "" ); } vlc_UrlClean( &url ); if( -1==r ) p_i->psz_name=NULL; /* recover from undefined value */ } vlc_mutex_unlock( &p_i->lock ); }
void input_item_SetURI( input_item_t *p_i, const char *psz_uri ) { vlc_mutex_lock( &p_i->lock ); #ifndef NDEBUG if( !strstr( psz_uri, "://" ) || strstr( psz_uri, " " ) || strstr( psz_uri, "\"" ) ) fprintf( stderr, "input_item_SetURI() was likely called with a path. FIXME\n" ); #endif free( p_i->psz_uri ); p_i->psz_uri = strdup( psz_uri ); p_i->i_type = GuessType( p_i ); if( p_i->psz_name ) ; else if( p_i->i_type == ITEM_TYPE_FILE || p_i->i_type == ITEM_TYPE_DIRECTORY ) { const char *psz_filename = strrchr( p_i->psz_uri, '/' ); if( psz_filename && *psz_filename == '/' ) psz_filename++; if( psz_filename && *psz_filename ) p_i->psz_name = strdup( psz_filename ); /* Make the name more readable */ if( p_i->psz_name ) decode_URI( p_i->psz_name ); } else { /* Strip login and password from title */ int r; vlc_url_t url; vlc_UrlParse( &url, psz_uri, 0 ); if( url.psz_protocol ) { if( url.i_port > 0 ) r=asprintf( &p_i->psz_name, "%s://%s:%d%s", url.psz_protocol, url.psz_host, url.i_port, url.psz_path ? url.psz_path : "" ); else r=asprintf( &p_i->psz_name, "%s://%s%s", url.psz_protocol, url.psz_host ? url.psz_host : "", url.psz_path ? url.psz_path : "" ); } else { if( url.i_port > 0 ) r=asprintf( &p_i->psz_name, "%s:%d%s", url.psz_host, url.i_port, url.psz_path ? url.psz_path : "" ); else r=asprintf( &p_i->psz_name, "%s%s", url.psz_host, url.psz_path ? url.psz_path : "" ); } vlc_UrlClean( &url ); if( -1==r ) p_i->psz_name=NULL; /* recover from undefined value */ } vlc_mutex_unlock( &p_i->lock ); }
// Convert row-level trigger using inserted and deleted system tables void SqlParser::SqlServerConvertRowLevelTrigger(Token *table, Token *when, Token *insert, Token *update, Token *delete_, Token *end) { if(table == NULL || when == NULL) return; TokenStr old_cols; TokenStr old_vars; Token *decl_end = _spl_last_declare; // Skip statement delimiter if(decl_end != NULL && Token::Compare(decl_end->next, ';', L';') == true) decl_end = decl_end->next; int num = 0; size_t old_prefix_len = 4; // Skip old. in column name references (old already prefixed with @ in target) if(_spl_old_correlation_name != NULL) old_prefix_len = _spl_old_correlation_name->len + 1 + 1; // Generate declaration for referenced OLD columns for(ListwItem *i = _spl_tr_old_columns.GetFirst(); i != NULL; i = i->next) { Token *var = (Token*)i->value; if(num == 0) Append(decl_end, "\n", L"\n", 1); else { old_cols.Append(", ", L", ", 2); old_vars.Append(", ", L", ", 2); } Append(decl_end, "\nDECLARE ", L"\nDECLARE ", 9, _declare_format); AppendCopy(decl_end, var); Append(decl_end, " ", L" ", 1); // Define the data type of the variable TokenStr type; GuessType(var, type); AppendNoFormat(decl_end, &type); Append(decl_end, ";", L";", 1); old_cols.Append(var, old_prefix_len, var->len - old_prefix_len + 1); old_vars.Append(var); num++; } // Declare deleted cursor if(delete_ != NULL) { Append(decl_end, "\nDECLARE ", L"\nDECLARE ", 9, _declare_format); AppendNoFormat(decl_end, "deleted_cur ", L"deleted_cur ", 12); Append(decl_end, "CURSOR FOR SELECT ", L"CURSOR FOR SELECT ", 18, _declare_format); AppendNoFormat(decl_end, &old_cols); Append(decl_end, " FROM ", L" FROM ", 6, _declare_format); AppendNoFormat(decl_end, "deleted;", L"deleted;", 8); } if(delete_ != NULL) Append(decl_end, "\n\nOPEN deleted_cur;", L"\n\nOPEN deleted_cur;", 19); Append(decl_end, "\nWHILE 1=0 BEGIN", L"\nWHILE 1=0 BEGIN", 16); if(delete_ != NULL) { Append(decl_end, "\nFETCH deleted_cur INTO ", L"\nFETCH deleted_cur INTO ", 24); AppendNoFormat(decl_end, &old_vars); Append(decl_end, ";", L";", 1); } Append(decl_end, "\nIF @@FETCH_STATUS <> 0 BREAK;", L"\nIF @@FETCH_STATUS <> 0 BREAK;", 30); // Terminate the cursor loop Token *end_loop = Prepend(end, "END\n", L"END\n", 4); if(delete_ != NULL) { Append(end_loop, "CLOSE deleted_cur;", L"CLOSE deleted_cur;", 18); Append(end_loop, "\nDEALLOCATE deleted_cur;", L"\nDEALLOCATE deleted_cur;", 24); } // Perform DELETE in INSTEAD OF trigger if(delete_ != NULL && insert == NULL && update == NULL) { Append(end_loop, "\nDELETE FROM ", L"\nDELETE FROM ", 13); AppendCopy(end_loop, table); Append(end_loop, " WHERE (", L" WHERE (", 8); AppendNoFormat(end_loop, &old_cols); Append(end_loop, ") IN (SELECT ", L") IN (SELECT ", 13); AppendNoFormat(end_loop, &old_cols); Append(end_loop, " FROM deleted);\n", L" FROM deleted);\n", 16); } }