Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /bin/sh /usr/share/dpatch/dpatch-run
- ## 06_mysql_charset.dpatch.dpatch by <gaochao@zf218nb.sczfcpa.com>
- ##
- ## All lines beginning with `## DP:' are a description of the patch.
- ## DP: No description.
- @DPATCH@
- diff --git a/dbf2mysql.c b/dbf2mysql.c
- index f20e3b9..f8b6571 100644
- --- a/dbf2mysql.c
- +++ b/dbf2mysql.c
- @@ -33,6 +33,7 @@ char *dbase = "test";
- char *table = "test";
- char *pass = NULL;
- char *user = NULL;
- +char *charset = "latin1";
- char *subarg = NULL;
- char *flist = NULL;
- @@ -85,7 +86,7 @@ void usage(void){
- printf("usage: dbf2mysql [-h hostname] [-d dbase] [-t table] [-p primary key]\n");
- printf(" [-o field[,field]] [-s oldname=newname[,oldname=newname]]\n");
- printf(" [-i field[,field]] [-c] [-f] [-F] [-n] [-r] [-u|-l] [-L]\n");
- - printf(" [-v[v]] [-x] [-q] [-P password] [-U user] dbf-file\n");
- + printf(" [-v[v]] [-x] [-q] [-P password] [-U user] [-C charset] dbf-file\n");
- }
- /* patch by Mindaugas Riauba <minde@pub.osf.lt> */
- @@ -604,7 +605,7 @@ int main(int argc, char **argv)
- primary[0] = '\0';
- - while ((i = getopt(argc, argv, "xqLfFrne:lucvi:h:p:d:t:s:o:U:P:")) != EOF) {
- + while ((i = getopt(argc, argv, "xqLfFrne:lucvi:h:p:d:t:s:o:U:P:C:")) != EOF) {
- switch (i) {
- case 'P':
- pass = (char *)strdup(optarg);
- @@ -612,6 +613,9 @@ int main(int argc, char **argv)
- case 'U':
- user = (char *)strdup(optarg);
- break;
- + case 'C':
- + charset = (char *)strdup(optarg);
- + break;
- case 'x':
- express=1;
- break;
- @@ -750,6 +754,17 @@ int main(int argc, char **argv)
- exit(1);
- }
- + if ((query = (char *)malloc(11 + strlen(charset)))) {
- + if (verbose > 2) {
- + printf("Setting charset to '%s'\n", charset);
- + }
- +
- + sprintf(query, "SET NAMES %s", charset);
- + mysql_query(&mysql, query);
- + free(query);
- + }
- +
- +
- /* Substitute field names */
- do_onlyfields(flist, dbh);
- do_substitute(subarg, dbh);
- diff --git a/mysql2dbf.c b/mysql2dbf.c
- index 58304ba..77c2849 100644
- --- a/mysql2dbf.c
- +++ b/mysql2dbf.c
- @@ -13,13 +13,14 @@
- #include <mysql.h>
- #include "dbf.h"
- -int verbose = 0, upper = 0, lower = 0, create = 0;
- +int verbose = 0, upper = 0, lower = 0, create = 0, enable_local = 0;
- long precision = 6;
- char *host = NULL;
- char *dbase = NULL;
- char *table = NULL;
- char *pass = NULL;
- char *user = NULL;
- +char *charset = "latin1";
- inline void strtoupper(char *string);
- inline void strtolower(char *string);
- @@ -41,16 +42,17 @@ inline void strtolower(char *string) {
- void usage(void) {
- printf("mysql2dbf %s\n", VERSION);
- - printf("usage:\tmysql2dbf [-h host] [-u | -l] [-v[v]]\n");
- + printf("usage:\tmysql2dbf [-h host] [-u | -l] [-v[v]] [-C charset] [-L]\n");
- printf("\t\t\t[-q query] [-P password] [-U user] -d dbase -t table dbf-file\n");
- }
- int main(int argc, char **argv) {
- int i;
- - MYSQL *SQLsock,mysql;
- + MYSQL mysql;
- extern int optind;
- extern char *optarg;
- char *query = NULL;
- + char *char_query = NULL;
- dbhead *dbh;
- field *rec;
- @@ -59,7 +61,7 @@ int main(int argc, char **argv) {
- MYSQL_FIELD *qfield;
- u_long numfields, numrows, t;
- - while ((i = getopt(argc, argv, "lucvq:h:d:t:p:U:P:")) != EOF) {
- + while ((i = getopt(argc, argv, "lucvq:h:d:t:p:U:P:C:L:")) != EOF) {
- switch(i) {
- case 'q':
- query = strdup(optarg);
- @@ -86,6 +88,9 @@ int main(int argc, char **argv) {
- }
- upper = 1;
- break;
- + case 'L':
- + enable_local = 1;
- + break;
- case 'h':
- host = (char *)strdup(optarg);
- break;
- @@ -101,6 +106,9 @@ int main(int argc, char **argv) {
- case 'U':
- user = (char *)strdup(optarg);
- break;
- + case 'C':
- + charset = (char *)strdup(optarg);
- + break;
- case ':':
- usage();
- printf("Missing argument!\n");
- @@ -148,46 +156,56 @@ int main(int argc, char **argv) {
- printf("Making connection with mySQL-server\n");
- }
- - if (!(SQLsock = mysql_connect(&mysql,host,user,pass))) {
- - fprintf(stderr, "Couldn't get a connection with the ");
- - fprintf(stderr, "designated host!\n");
- - fprintf(stderr, "Detailed report: %s\n", mysql_error(&mysql));
- - close(dbh->db_fd);
- - free(dbh);
- - exit(1);
- - }
- + mysql_init(&mysql);
- +
- + if (enable_local == 1) {
- + if (verbose) {
- + printf("Setting MySQL option MYSQL_OPT_LOCAL_INFILE\n");
- + }
- +
- + if (mysql_options(&mysql, MYSQL_OPT_LOCAL_INFILE, 0)) {
- + printf("Setting option not succeeded.");
- + exit(1);
- + }
- + }
- - if (verbose > 1) {
- - printf("Selecting database\n");
- - }
- + if (!mysql_real_connect(&mysql,host,user,pass, dbase, 0, NULL,0)) {
- + fprintf(stderr, "Couldn't get a connection with the ");
- + fprintf(stderr, "designated host!\n");
- + fprintf(stderr, "Detailed report: %s\n", mysql_error(&mysql));
- + dbf_close(&dbh);
- + exit(1);
- + }
- +
- + if ((char_query = (char *)malloc(11 + strlen(charset)))) {
- + if (verbose > 2) {
- + printf("Setting charset to '%s'\n", charset);
- + }
- +
- + sprintf(char_query, "SET NAMES %s", charset);
- + mysql_query(&mysql, char_query);
- + free(char_query);
- + }
- - if ((mysql_select_db(SQLsock, dbase)) == -1) {
- - fprintf(stderr, "Couldn't select database %s.\n", dbase);
- - fprintf(stderr, "Detailed report: %s\n", mysql_error(SQLsock));
- - close(dbh->db_fd);
- - free(dbh);
- - mysql_close(SQLsock);
- - exit(1);
- - }
- if (verbose > 1) {
- printf("Sending query\n");
- }
- - if (mysql_query(SQLsock, query) == -1) {
- + if (mysql_query(&mysql, query) == -1) {
- fprintf(stderr, "Error sending query.\nDetailed report: %s\n",
- - mysql_error(SQLsock));
- + mysql_error(&mysql));
- if (verbose > 1) {
- fprintf(stderr, "%s\n", query);
- }
- - mysql_close(SQLsock);
- + mysql_close(&mysql);
- close(dbh->db_fd);
- free(dbh);
- exit(1);
- }
- - qres = mysql_store_result(SQLsock);
- + qres = mysql_store_result(&mysql);
- numfields = mysql_num_fields(qres);
- numrows = mysql_num_rows(qres);
- @@ -303,7 +321,7 @@ int main(int argc, char **argv) {
- }
- mysql_free_result(qres);
- - mysql_close(SQLsock);
- + mysql_close(&mysql);
- close(dbh->db_fd);
- free(dbh);
- exit(0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement