bool wxFileTypeImpl::GetOpenCommand(wxString *openCmd, const wxFileType::MessageParameters& params) const { wxString application; if ( !m_manager->GetApplication(m_uti, &application) ) return false; *openCmd << QuoteIfNecessary(application) << ' ' << QuoteIfNecessary(params.GetFileName()); return true; }
char *swq_expr_node::Unparse( swq_field_list *field_list, char chColumnQuote ) { CPLString osExpr; /* -------------------------------------------------------------------- */ /* Handle constants. */ /* -------------------------------------------------------------------- */ if( eNodeType == SNT_CONSTANT ) { if( is_null ) return CPLStrdup("NULL"); if( field_type == SWQ_INTEGER || field_type == SWQ_INTEGER64 || field_type == SWQ_BOOLEAN ) osExpr.Printf( CPL_FRMT_GIB, int_value ); else if( field_type == SWQ_FLOAT ) { osExpr.Printf( "%.15g", float_value ); // Make sure this is interpreted as a floating point value // and not as an integer later. if( strchr(osExpr, '.') == nullptr && strchr(osExpr, 'e') == nullptr && strchr(osExpr, 'E') == nullptr ) osExpr += '.'; } else { osExpr = Quote( string_value ); } return CPLStrdup(osExpr); } /* -------------------------------------------------------------------- */ /* Handle columns. */ /* -------------------------------------------------------------------- */ if( eNodeType == SNT_COLUMN ) { if( field_list == nullptr ) { if( table_name ) osExpr.Printf( "%s.%s", QuoteIfNecessary(table_name, chColumnQuote).c_str(), QuoteIfNecessary(string_value, chColumnQuote).c_str() ); else osExpr.Printf( "%s", QuoteIfNecessary(string_value, chColumnQuote).c_str() ); } else if( field_index != -1 && table_index < field_list->table_count && table_index > 0 ) { // We deliberately browse through the list starting from the end // This is for the case where the FID column exists both as // FID and then real_fid_name. We want real_fid_name to be used for( int i = field_list->count - 1; i >= 0; i-- ) { if( field_list->table_ids[i] == table_index && field_list->ids[i] == field_index ) { osExpr.Printf( "%s.%s", QuoteIfNecessary(field_list->table_defs[table_index].table_name, chColumnQuote).c_str(), QuoteIfNecessary(field_list->names[i], chColumnQuote).c_str() ); break; } } } else if( field_index != -1 ) { // We deliberately browse through the list starting from the end // This is for the case where the FID column exists both as // FID and then real_fid_name. We want real_fid_name to be used for( int i = field_list->count - 1; i >= 0; i-- ) { if( field_list->table_ids[i] == table_index && field_list->ids[i] == field_index ) { osExpr.Printf( "%s", QuoteIfNecessary(field_list->names[i], chColumnQuote).c_str() ); break; } } } if( osExpr.empty() ) { return CPLStrdup(CPLSPrintf("%c%c", chColumnQuote, chColumnQuote)); } // The string is just alphanum and not a reserved SQL keyword, // no needs to quote and escape. return CPLStrdup(osExpr.c_str()); } /* -------------------------------------------------------------------- */ /* Operation - start by unparsing all the subexpressions. */ /* -------------------------------------------------------------------- */ std::vector<char*> apszSubExpr; apszSubExpr.reserve(nSubExprCount); for( int i = 0; i < nSubExprCount; i++ ) apszSubExpr.push_back( papoSubExpr[i]->Unparse(field_list, chColumnQuote) ); osExpr = UnparseOperationFromUnparsedSubExpr(&apszSubExpr[0]); /* -------------------------------------------------------------------- */ /* cleanup subexpressions. */ /* -------------------------------------------------------------------- */ for( int i = 0; i < nSubExprCount; i++ ) CPLFree( apszSubExpr[i] ); return CPLStrdup( osExpr.c_str() ); }