--- parser3/src/include/pa_common.h 2007/02/07 15:49:51 1.112 +++ parser3/src/include/pa_common.h 2008/05/22 17:27:22 1.118 @@ -8,7 +8,7 @@ #ifndef PA_COMMON_H #define PA_COMMON_H -static const char * const IDENT_COMMON_H="$Date: 2007/02/07 15:49:51 $"; +static const char * const IDENT_COMMON_H="$Date: 2008/05/22 17:27:22 $"; #include "pa_string.h" #include "pa_hash.h" @@ -134,7 +134,9 @@ typedef void (*File_write_action)(int f, */ bool file_write_action_under_lock( const String& file_spec, - const char* action_name, File_write_action action, void *context, + const char* action_name, + File_write_action action, + void *context, bool as_text=false, bool do_append=false, bool do_block=true, @@ -189,7 +191,7 @@ const char* format(double value, char *f size_t stdout_write(const void *buf, size_t size); -char *unescape_chars(const char* cp, int len); +char* unescape_chars(const char* cp, int len, Request_charsets* charsets=0); #ifdef WIN32 void back_slashes_to_slashes(char *s); @@ -206,7 +208,7 @@ bool StrEqNc(const char* s1, const char* #define SECS_PER_DAY (60*60*24) int getMonthDays(int year, int month); -void remove_crlf(char *start, char *end); +int remove_crlf(char *start, char *end); #ifdef PA_SAFE_MODE void check_safe_mode(struct stat finfo, const String& file_spec, const char* fname); @@ -282,6 +284,37 @@ static const char* hex_string(unsigned c int pa_get_valid_file_options_count(HashStringValue& options); +// some stuff for use with .for_each +static void copy_all_overwrite_to( + HashStringValue::key_type key, + HashStringValue::value_type value, + HashStringValue* dest) { + dest->put(key, value); +} + +static void remove_key_from( + HashStringValue::key_type key, + HashStringValue::value_type /*value*/, + HashStringValue* dest) { + dest->remove(key); +} + +static String::C date_gmt_string(tm* tms) { + /// http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3 + static const char month_names[12][4]={ + "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; + static const char days[7][4]={ + "Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; + + char *buf=new(PointerFreeGC) char[MAX_STRING]; + return String::C(buf, + snprintf(buf, MAX_STRING, "%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT", + days[tms->tm_wday], + tms->tm_mday,month_names[tms->tm_mon],tms->tm_year+1900, + tms->tm_hour,tms->tm_min,tms->tm_sec)); +} + + // globals extern const String file_status_name; @@ -292,5 +325,19 @@ extern const String file_status_name; #define PA_SQL_OFFSET_NAME "offset" #define PA_COLUMN_SEPARATOR_NAME "separator" #define PA_COLUMN_ENCLOSER_NAME "encloser" +#define PA_CHARSET_NAME "charset" + +// globals defines for sql options +#define SQL_BIND_NAME "bind" +#define SQL_DEFAULT_NAME "default" +#define SQL_DISTINCT_NAME "distinct" +#define SQL_VALUE_TYPE_NAME "type" + +#ifndef DOXYGEN +enum Table2hash_distint { D_ILLEGAL, D_FIRST }; +enum Table2hash_value_type { C_HASH, C_STRING, C_TABLE }; #endif + +#endif +