transactd 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/common/tdclc_32_3_1.dll +0 -0
- data/bin/common/tdclc_64_3_1.dll +0 -0
- data/build/common/transactd.rc.in +1 -1
- data/build/swig/ruby/tdclrb_wrap.cpp +219 -15
- data/build/swig/tdcl.i +26 -0
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +5 -5
- data/build/tdclcpp/tdclcpp.rc +5 -5
- data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
- data/build/tdclrb/tdclrb.rc +5 -5
- data/source/bzs/db/engine/mysql/database.cpp +131 -29
- data/source/bzs/db/engine/mysql/database.h +8 -6
- data/source/bzs/db/engine/mysql/dbManager.cpp +30 -12
- data/source/bzs/db/engine/mysql/dbManager.h +1 -1
- data/source/bzs/db/engine/mysql/mysqlInternal.h +251 -24
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +2 -3
- data/source/bzs/db/protocol/tdap/client/bulkInsert.h +2 -2
- data/source/bzs/db/protocol/tdap/client/client.h +4 -3
- data/source/bzs/db/protocol/tdap/client/connMgr.h +1 -1
- data/source/bzs/db/protocol/tdap/client/database.cpp +195 -91
- data/source/bzs/db/protocol/tdap/client/database.h +6 -6
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +9 -3
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +31 -25
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +4 -2
- data/source/bzs/db/protocol/tdap/client/field.cpp +6 -16
- data/source/bzs/db/protocol/tdap/client/filter.h +28 -9
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +14 -4
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +20 -2
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +5 -2
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +2 -1
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +19 -16
- data/source/bzs/db/protocol/tdap/client/table.cpp +2 -1
- data/source/bzs/db/protocol/tdap/client/table.h +1 -1
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +13 -9
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +68 -21
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +3 -7
- data/source/bzs/db/protocol/tdap/tdapSchema.h +9 -1
- data/source/bzs/db/protocol/tdap/tdapcapi.h +11 -3
- data/source/bzs/db/protocol/tdap/uri.h +3 -1
- data/source/bzs/env/crosscompile.h +17 -3
- data/source/bzs/test/tdclatl/test_v3.js +60 -2
- data/source/bzs/test/tdclphp/transactd_Test.php +8 -0
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +11 -3
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +32 -8
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +7 -7
- data/source/bzs/test/tdclrb/transactd_spec.rb +22 -1
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +29 -3
- data/source/bzs/test/trdclengn/testField.h +34 -0
- data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +7 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +7 -8
- data/source/global/tdclatl/Database.cpp +34 -10
- data/source/global/tdclatl/Database.h +5 -5
- data/source/global/tdclatl/PooledDbManager.cpp +20 -3
- data/source/global/tdclatl/PooledDbManager.h +2 -2
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +5 -4
- data/source/global/tdclatl/tdclatl.idl +157 -119
- metadata +4 -4
- data/bin/common/tdclc_32_3_0.dll +0 -0
- data/bin/common/tdclc_64_3_0.dll +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
#ifndef BZS_DB_ENGINE_MYSQL_MYSQLINTERNAL_H
|
2
2
|
#define BZS_DB_ENGINE_MYSQL_MYSQLINTERNAL_H
|
3
3
|
/* =================================================================
|
4
|
-
Copyright (C) 2012
|
4
|
+
Copyright (C) 2012-2016 BizStation Corp All rights reserved.
|
5
5
|
|
6
6
|
This program is free software; you can redistribute it and/or
|
7
7
|
modify it under the terms of the GNU General Public License
|
@@ -109,7 +109,11 @@ extern "C" {
|
|
109
109
|
|
110
110
|
/* mysql.user password field index */
|
111
111
|
#ifndef MYSQL_USER_FIELD_PASSWORD
|
112
|
-
#
|
112
|
+
# if ((MYSQL_VERSION_ID > 50700) && !defined(MARIADB_BASE_VERSION))
|
113
|
+
# define MYSQL_USER_FIELD_PASSWORD 40
|
114
|
+
# else
|
115
|
+
# define MYSQL_USER_FIELD_PASSWORD 2
|
116
|
+
# endif
|
113
117
|
#endif
|
114
118
|
|
115
119
|
#undef test
|
@@ -154,15 +158,27 @@ extern "C" {
|
|
154
158
|
#define cp_get_sql_error() stmt_da->sql_errno()
|
155
159
|
#define cp_isOk() stmt_da->is_ok()
|
156
160
|
#define cp_set_overwrite_status(A) stmt_da->can_overwrite_status = A
|
161
|
+
#define cp_reset_diagnostics_area() stmt_da->reset_diagnostics_area()
|
162
|
+
#define cp_master_accsess() master_access
|
163
|
+
#define cp_priv_host() priv_host
|
164
|
+
#define cp_priv_user() priv_user
|
157
165
|
#elif((MYSQL_VERSION_NUM > 50700) && !defined(MARIADB_BASE_VERSION)) // MySQL 5.7
|
158
166
|
#define cp_get_sql_error() get_stmt_da()->mysql_errno()
|
159
167
|
#define query_cache_invalidate3(A, B, C) query_cache.invalidate(A, B, C)
|
160
168
|
#define cp_isOk() get_stmt_da()->is_ok()
|
161
169
|
#define cp_set_overwrite_status(A) get_stmt_da()->set_overwrite_status(A)
|
170
|
+
#define cp_reset_diagnostics_area() get_stmt_da()->reset_diagnostics_area()
|
171
|
+
#define cp_master_accsess() master_access()
|
172
|
+
#define cp_priv_host() host().str
|
173
|
+
#define cp_priv_user() user().str
|
162
174
|
#else // MySQL 5.6 Mariadb 10.0
|
163
175
|
#define cp_get_sql_error() get_stmt_da()->sql_errno()
|
164
176
|
#define cp_isOk() get_stmt_da()->is_ok()
|
165
177
|
#define cp_set_overwrite_status(A) get_stmt_da()->set_overwrite_status(A)
|
178
|
+
#define cp_reset_diagnostics_area() get_stmt_da()->reset_diagnostics_area()
|
179
|
+
#define cp_master_accsess() master_access
|
180
|
+
#define cp_priv_host() priv_host
|
181
|
+
#define cp_priv_user() priv_user
|
166
182
|
|
167
183
|
#endif
|
168
184
|
|
@@ -258,7 +274,6 @@ inline void cp_evaluate_insert_default_function(Field* fd)
|
|
258
274
|
|
259
275
|
inline void cp_evaluate_update_default_function(Field* fd)
|
260
276
|
{
|
261
|
-
|
262
277
|
#if (MYSQL_VERSION_ID > 50600)
|
263
278
|
Field* ft = fd;
|
264
279
|
#else
|
@@ -268,16 +283,13 @@ inline void cp_evaluate_update_default_function(Field* fd)
|
|
268
283
|
ft->set_time();
|
269
284
|
}
|
270
285
|
|
271
|
-
|
272
286
|
inline unsigned char* cp_null_ptr(Field* fd, unsigned char* /*record*/)
|
273
287
|
{
|
274
288
|
return (unsigned char*)fd->null_ptr;
|
275
289
|
}
|
276
|
-
|
277
290
|
|
278
291
|
#else
|
279
292
|
|
280
|
-
|
281
293
|
inline void cp_thd_release_resources(THD* thd)
|
282
294
|
{
|
283
295
|
thd->release_resources();
|
@@ -411,7 +423,6 @@ inline void cp_set_db(THD* thd, char* p)
|
|
411
423
|
thd->set_db(to_lex_cstring(p));
|
412
424
|
}
|
413
425
|
|
414
|
-
|
415
426
|
inline THD* cp_thread_get_THR_THD()
|
416
427
|
{
|
417
428
|
return my_thread_get_THR_THD();
|
@@ -519,23 +530,6 @@ inline int cp_thread_set_THR_THD(THD* thd)
|
|
519
530
|
my_pthread_setspecific_ptr(THR_THD, thd);
|
520
531
|
return 0;
|
521
532
|
}
|
522
|
-
/*
|
523
|
-
inline void cp_set_transaction_duration_for_all_locks(THD* thd)
|
524
|
-
{
|
525
|
-
thd->mdl_context.set_transaction_duration_for_all_locks();
|
526
|
-
}
|
527
|
-
|
528
|
-
inline void cp_set_mdl_request_types(TABLE_LIST& tables, short mode)
|
529
|
-
{
|
530
|
-
tables.mdl_request.set_type(MDL_SHARED_READ);
|
531
|
-
tables.mdl_request.duration = MDL_EXPLICIT;
|
532
|
-
}
|
533
|
-
|
534
|
-
inline void cp_open_error_release(THD* thd, TABLE_LIST& tables)
|
535
|
-
{
|
536
|
-
thd->mdl_context.release_lock(tables.mdl_request.ticket);
|
537
|
-
}
|
538
|
-
*/
|
539
533
|
|
540
534
|
inline void cp_set_transaction_duration_for_all_locks(THD* thd)
|
541
535
|
{
|
@@ -625,4 +619,237 @@ inline void cp_setup_rpl_bitmap(TABLE* table){};
|
|
625
619
|
|
626
620
|
#endif
|
627
621
|
|
622
|
+
|
623
|
+
class safe_mysql_mutex_lock
|
624
|
+
{
|
625
|
+
mysql_mutex_t *m_lock;
|
626
|
+
public:
|
627
|
+
safe_mysql_mutex_lock(mysql_mutex_t *lock): m_lock(lock)
|
628
|
+
{
|
629
|
+
if (m_lock)
|
630
|
+
mysql_mutex_lock(m_lock);
|
631
|
+
}
|
632
|
+
~safe_mysql_mutex_lock()
|
633
|
+
{
|
634
|
+
if (m_lock)
|
635
|
+
mysql_mutex_unlock(m_lock);
|
636
|
+
}
|
637
|
+
};
|
638
|
+
|
639
|
+
|
640
|
+
// REPL_POS_TYPE
|
641
|
+
#include <bzs/env/compiler.h>
|
642
|
+
pragma_pack1;
|
643
|
+
#define BINLOGNAME_SIZE 119
|
644
|
+
#define GTID_SIZE 64
|
645
|
+
|
646
|
+
struct binlogPos
|
647
|
+
{
|
648
|
+
my_off_t pos;
|
649
|
+
char type;
|
650
|
+
char filename[BINLOGNAME_SIZE];
|
651
|
+
char gtid[GTID_SIZE];
|
652
|
+
};
|
653
|
+
pragma_pop;
|
654
|
+
#define REPL_POSTYPE_MARIA_GTID 1 // see tdapapi.h
|
655
|
+
#define REPL_POSTYPE_POS 2 // see tdapapi.h
|
656
|
+
|
657
|
+
|
658
|
+
#if (MYSQL_VERSION_ID > 100000)
|
659
|
+
# define USE_BINLOG_GTID 1 // like 0-1-50
|
660
|
+
#elif (!defined(_WIN32) || MYSQL_VERSION_ID > 50700 || MYSQL_VERSION_ID < 50600) // Linux or MySQL 5.5 5.7
|
661
|
+
# define USE_BINLOG_VAR 1
|
662
|
+
# if (!defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID > 50600)
|
663
|
+
# include "sql/binlog.h"
|
664
|
+
# endif
|
665
|
+
|
666
|
+
#else // MySQL 5.6 on windows
|
667
|
+
// On windows MySQL 5.6 can not access mysql_bin_log variable
|
668
|
+
# define NOTUSE_BINLOG_VAR 1
|
669
|
+
|
670
|
+
#if (MYSQL_VERSION_ID > 50700)
|
671
|
+
# define Protocol_mysql Protocol
|
672
|
+
# include "sql/rpl_master.h"
|
673
|
+
# define CP_PROTOCOL PROTOCOL_PLUGIN
|
674
|
+
#else
|
675
|
+
# define Protocol_mysql Protocol
|
676
|
+
# define CP_PROTOCOL PROTOCOL_BINARY
|
677
|
+
#endif //(MYSQL_VERSION_ID > 50700)
|
678
|
+
|
679
|
+
class dummyProtocol : public Protocol_mysql
|
680
|
+
{
|
681
|
+
THD* m_thd;
|
682
|
+
public:
|
683
|
+
#if (MYSQL_VERSION_ID > 50700)
|
684
|
+
inline dummyProtocol(THD *thd_arg) : Protocol_mysql()
|
685
|
+
{
|
686
|
+
m_thd = thd_arg;
|
687
|
+
thd_arg->set_protocol(this);
|
688
|
+
}
|
689
|
+
inline virtual ~dummyProtocol(){}
|
690
|
+
#else
|
691
|
+
inline dummyProtocol(THD *thd_arg) : Protocol_mysql(thd_arg)
|
692
|
+
{
|
693
|
+
thd_arg->protocol = this;
|
694
|
+
}
|
695
|
+
inline virtual ~dummyProtocol(){}
|
696
|
+
#endif
|
697
|
+
bool send_result_set_metadata(List<Item> *list, uint flags){return false;}
|
698
|
+
virtual bool write(){return false;};
|
699
|
+
virtual void prepare_for_resend(){}
|
700
|
+
virtual bool store_null(){return false;}
|
701
|
+
virtual bool store_tiny(longlong from){return false;}
|
702
|
+
virtual bool store_short(longlong from){return false;}
|
703
|
+
virtual bool store_long(longlong from){return false;}
|
704
|
+
virtual bool store_longlong(longlong from, bool unsigned_flag){return false;}
|
705
|
+
virtual bool store_decimal(const my_decimal *){return false;}
|
706
|
+
virtual bool store(const char *from, size_t length,
|
707
|
+
const CHARSET_INFO *fromcs,
|
708
|
+
const CHARSET_INFO *tocs){return false;}
|
709
|
+
virtual bool store(float from, uint32 decimals, String *buffer){return false;}
|
710
|
+
virtual bool store(double from, uint32 decimals, String *buffer){return false;}
|
711
|
+
virtual bool store(MYSQL_TIME *time, uint precision){return false;}
|
712
|
+
virtual bool store_date(MYSQL_TIME *time){return false;}
|
713
|
+
virtual bool store_time(MYSQL_TIME *time, uint precision){return false;}
|
714
|
+
virtual bool store(Field *field){return false;}
|
715
|
+
virtual bool send_out_parameters(List<Item_param> *sp_params){return false;}
|
716
|
+
virtual Protocol::enum_protocol_type type(void){ return CP_PROTOCOL; };
|
717
|
+
#ifdef MARIADB_BASE_VERSION //Mariadb 5.5
|
718
|
+
virtual bool store(MYSQL_TIME *time, int decimals){return false;}
|
719
|
+
virtual bool store_time(MYSQL_TIME *time, int decimals){ return false;}
|
720
|
+
#elif (MYSQL_VERSION_ID < 50600) // MySQL 5.5
|
721
|
+
virtual bool store_time(MYSQL_TIME *time){return true;};
|
722
|
+
virtual bool store(MYSQL_TIME *time){return true;}
|
723
|
+
virtual bool store(const char *from, size_t length,
|
724
|
+
CHARSET_INFO *fromcs, CHARSET_INFO *tocs){return false;}
|
725
|
+
#elif (MYSQL_VERSION_ID > 50700) // MySQL 5.7
|
726
|
+
bool store_decimal(const my_decimal *, uint, uint){ return true; }
|
727
|
+
bool store(Proto_field *){ return true; }
|
728
|
+
void start_row(){}
|
729
|
+
int read_packet(void){ return 0; }
|
730
|
+
int get_command(COM_DATA *, enum_server_command *){ return m_thd->lex->sql_command; }
|
731
|
+
enum_vio_type connection_type(void){ return VIO_TYPE_PLUGIN; }
|
732
|
+
ulong get_client_capabilities(void){ return 0; }
|
733
|
+
bool has_client_capability(unsigned long){ return false; }
|
734
|
+
bool connection_alive(void){ return false; }
|
735
|
+
bool end_row(void){ return false; }
|
736
|
+
void abort_row(void){}
|
737
|
+
void end_partial_result_set(void){}
|
738
|
+
int shutdown(bool){ return 0; }
|
739
|
+
SSL_handle get_ssl(void){ return NULL; }
|
740
|
+
uint get_rw_status(void){ return 0; }
|
741
|
+
bool get_compression(void){ return false; }
|
742
|
+
bool start_result_metadata(uint, uint, const CHARSET_INFO *){ return false; }
|
743
|
+
bool send_field_metadata(Send_field *, const CHARSET_INFO *){ return false; }
|
744
|
+
bool end_result_metadata(void){ return false; }
|
745
|
+
bool send_ok(uint, uint, ulonglong, ulonglong, const char *){ return false; }
|
746
|
+
bool send_eof(uint, uint){ return false; }
|
747
|
+
bool send_error(uint, const char *, const char *){ return false; }
|
748
|
+
#endif
|
749
|
+
};
|
750
|
+
|
751
|
+
class masterStatus : public dummyProtocol
|
752
|
+
{
|
753
|
+
binlogPos* m_bpos;
|
754
|
+
bool m_writed;
|
755
|
+
public:
|
756
|
+
inline masterStatus(THD *thd_arg, binlogPos* bpos) :
|
757
|
+
dummyProtocol(thd_arg), m_bpos(bpos), m_writed(false) {}
|
758
|
+
bool store_longlong(longlong from, bool unsigned_flag)
|
759
|
+
{
|
760
|
+
m_bpos->pos = (ulonglong)from;
|
761
|
+
m_bpos->type = REPL_POSTYPE_POS;
|
762
|
+
return false;
|
763
|
+
}
|
764
|
+
|
765
|
+
#if (MYSQL_VERSION_ID < 50600 || defined(MARIADB_BASE_VERSION)) // MySQL 5.5
|
766
|
+
bool store(const char *from, size_t length, CHARSET_INFO *cs)
|
767
|
+
{
|
768
|
+
if (!m_writed)
|
769
|
+
{
|
770
|
+
strncpy(m_bpos->filename, from, BINLOGNAME_SIZE);
|
771
|
+
m_writed = true;
|
772
|
+
}
|
773
|
+
return false;
|
774
|
+
}
|
775
|
+
#else
|
776
|
+
bool store(const char *from, size_t length,
|
777
|
+
const CHARSET_INFO *cs)
|
778
|
+
{
|
779
|
+
if (!m_writed)
|
780
|
+
{
|
781
|
+
strncpy(m_bpos->filename, from, BINLOGNAME_SIZE);
|
782
|
+
m_writed = true;
|
783
|
+
}
|
784
|
+
return false;
|
785
|
+
}
|
786
|
+
#endif
|
787
|
+
};
|
788
|
+
|
789
|
+
#endif // NOTUSE_BINLOG_VAR
|
790
|
+
|
791
|
+
class safe_commit_lock
|
792
|
+
{
|
793
|
+
THD* m_thd;
|
794
|
+
MDL_ticket* m_commits_lock;
|
795
|
+
public:
|
796
|
+
safe_commit_lock(THD* thd): m_thd(thd), m_commits_lock(NULL){}
|
797
|
+
bool lock()
|
798
|
+
{
|
799
|
+
if (m_thd)
|
800
|
+
{
|
801
|
+
MDL_request mdl_request;
|
802
|
+
#if ((MYSQL_VERSION_NUM > 50700) && !defined(MARIADB_BASE_VERSION))
|
803
|
+
mdl_request.init_with_source(MDL_key::COMMIT, "", "", MDL_SHARED, MDL_EXPLICIT, __FILE__, __LINE__);
|
804
|
+
#else
|
805
|
+
mdl_request.init(MDL_key::COMMIT, "", "", MDL_SHARED, MDL_EXPLICIT);
|
806
|
+
#endif
|
807
|
+
if (m_thd->mdl_context.acquire_lock(&mdl_request,
|
808
|
+
m_thd->variables.lock_wait_timeout))
|
809
|
+
return false;
|
810
|
+
m_commits_lock = mdl_request.ticket;
|
811
|
+
}
|
812
|
+
return true;
|
813
|
+
}
|
814
|
+
~safe_commit_lock()
|
815
|
+
{
|
816
|
+
if (m_commits_lock)
|
817
|
+
{
|
818
|
+
m_thd->mdl_context.release_lock(m_commits_lock);
|
819
|
+
m_commits_lock= NULL;
|
820
|
+
}
|
821
|
+
}
|
822
|
+
};
|
823
|
+
|
824
|
+
/*
|
825
|
+
class safe_global_read_lock
|
826
|
+
{
|
827
|
+
THD* m_thd;
|
828
|
+
public:
|
829
|
+
safe_global_read_lock(THD* thd): m_thd(thd){}
|
830
|
+
bool lock()
|
831
|
+
{
|
832
|
+
if (m_thd->global_read_lock.lock_global_read_lock(m_thd))
|
833
|
+
{
|
834
|
+
m_thd = NULL;
|
835
|
+
return false;
|
836
|
+
}
|
837
|
+
#ifdef NOTUSE_BINLOG_VAR
|
838
|
+
close_cached_tables(NULL, NULL, FALSE , 50000000L);
|
839
|
+
if (m_thd->global_read_lock.make_global_read_lock_block_commit(m_thd))
|
840
|
+
{
|
841
|
+
m_thd->global_read_lock.unlock_global_read_lock(m_thd);
|
842
|
+
m_thd = NULL;
|
843
|
+
return false;
|
844
|
+
}
|
845
|
+
#endif
|
846
|
+
return true;
|
847
|
+
}
|
848
|
+
~safe_global_read_lock()
|
849
|
+
{
|
850
|
+
if (m_thd)
|
851
|
+
m_thd->global_read_lock.unlock_global_read_lock(m_thd);
|
852
|
+
}
|
853
|
+
};*/
|
854
|
+
|
628
855
|
#endif // BZS_DB_ENGINE_MYSQL_MYSQLINTERNAL_H
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/* =================================================================
|
2
|
-
Copyright (C) 2012
|
2
|
+
Copyright (C) 2012-2016 BizStation Corp All rights reserved.
|
3
3
|
|
4
4
|
This program is free software; you can redistribute it and/or
|
5
5
|
modify it under the terms of the GNU General Public License
|
@@ -101,10 +101,9 @@ void endThread()
|
|
101
101
|
|
102
102
|
void waitForServerStart()
|
103
103
|
{
|
104
|
-
|
104
|
+
safe_mysql_mutex_lock lck(&LOCK_server_started);
|
105
105
|
while (!mysqld_server_started)
|
106
106
|
mysql_cond_wait(&COND_server_started, &LOCK_server_started);
|
107
|
-
mysql_mutex_unlock(&LOCK_server_started);
|
108
107
|
}
|
109
108
|
|
110
109
|
int getTransactdIsolation()
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_BULKINSERT_H
|
2
2
|
#define BZS_DB_PROTOCOL_TDAP_CLIENT_BULKINSERT_H
|
3
3
|
/*=================================================================
|
4
|
-
Copyright (C) 2000-
|
4
|
+
Copyright (C) 2000-2016 BizStation Corp All rights reserved.
|
5
5
|
|
6
6
|
This program is free software; you can redistribute it and/or
|
7
7
|
modify it under the terms of the GNU General Public License
|
@@ -51,7 +51,7 @@ public:
|
|
51
51
|
m_buflen = BULKBUFSIZE;
|
52
52
|
}
|
53
53
|
|
54
|
-
~bulkInsert() { delete[] m_buf; }
|
54
|
+
~bulkInsert() { delete [] m_buf; }
|
55
55
|
|
56
56
|
char* reallocBuffer(char* buf, int oldsize, int newSize)
|
57
57
|
{
|
@@ -314,7 +314,7 @@ public:
|
|
314
314
|
m_req.datalen = &m_tmplen;
|
315
315
|
}
|
316
316
|
|
317
|
-
inline void getSqlCreate()
|
317
|
+
inline void getSqlCreate(int charsetIndex = -1)
|
318
318
|
{
|
319
319
|
if (!ver())
|
320
320
|
{
|
@@ -324,9 +324,10 @@ public:
|
|
324
324
|
_TCHAR tmp[MAX_PATH*2]={0};
|
325
325
|
stripAuth((const char*)m_req.keybuf, tmp, MAX_PATH);
|
326
326
|
std::string name = getTableName(tmp);
|
327
|
-
|
327
|
+
if (charsetIndex == -1)
|
328
|
+
charsetIndex = getServerCharsetIndex();
|
328
329
|
std::string sql = sqlBuilder::sqlCreateTable(name.c_str(), (tabledef*)m_req.data,
|
329
|
-
|
330
|
+
charsetIndex, ver());
|
330
331
|
uint_td datalen = *m_req.datalen;
|
331
332
|
*m_req.datalen = (uint_td)(sql.size() + 1);
|
332
333
|
if (datalen <= sql.size())
|