Compare commits

13 Commits

Author SHA1 Message Date
249c61829b !44 fix CVE-2024-1013
Merge pull request !44 from 蒋宏博/master
2024-04-03 01:23:58 +00:00
0950bb37b0 !31 odbc适配兼容类型
Merge pull request !31 from Lain/odbc适配兼容类型
2024-03-22 01:40:28 +00:00
8d21ce471a fix CVE-2024-1013 2024-03-19 17:15:33 +08:00
8e6f45dbd5 !41 修复部分odbc问题:printf中格式字符的类型与实际参数类型、个数不一致
Merge pull request !41 from 刘展峰/master
2023-07-24 11:29:52 +00:00
d3ab2d8759 修复printf中格式字符的类型与实际参数类型/个数不一致 2023-07-20 20:28:31 +08:00
9ca9be8b02 !33 odbc支持windows出包
Merge pull request !33 from liuheng/master
2023-03-23 01:28:23 +00:00
0216192407 odbc支持windows出包 2023-03-22 22:44:56 +08:00
65bfc3960b update convert.c.
Signed-off-by: Lain <linkc@vastdata.com.cn>
2023-02-02 10:55:17 +00:00
c08565dab2 update pgtypes.h.
Signed-off-by: Lain <linkc@vastdata.com.cn>
2023-02-02 10:51:37 +00:00
efe5823daa update convert.c.
Signed-off-by: Lain <linkc@vastdata.com.cn>
2023-02-02 10:49:49 +00:00
21bc1884bd update convert.c.
Signed-off-by: Lain <linkc@vastdata.com.cn>
2023-02-02 10:46:38 +00:00
f764447a69 update convert.c.
Signed-off-by: Lain <linkc@vastdata.com.cn>
2023-02-02 10:37:16 +00:00
595ad54a23 update pgtypes.h.
Signed-off-by: Lain <linkc@vastdata.com.cn>
2023-02-02 10:19:34 +00:00
45 changed files with 966 additions and 478 deletions

View File

@ -104,7 +104,7 @@ while [ $# -gt 0 ]; do
serverlib_dir=$2
shift 2
;;
-ud|--unixodbc_dir)
-ud|--unixodbc_dir)
if [ "$2"X = X ]; then
echo "no given unixodbc directory values"
exit 1

View File

@ -169,7 +169,7 @@ static const char *mapFunction(const char *func, int param_count);
static BOOL convert_money(const char *s, char *sout, size_t soutmax);
static char parse_datetime(const char *buf, SIMPLE_TIME *st);
size_t convert_linefeeds(const char *s, char *dst, size_t max, BOOL convlf, BOOL *changed);
static size_t convert_from_pgbinary(const char *value, char *rgbValue, SQLLEN cbValueMax);
static size_t convert_from_pgbinary(const char *value, bool binary_rawout, char *rgbValue, SQLLEN cbValueMax);
static int convert_lo(StatementClass *stmt, const void *value, SQLSMALLINT fCType,
PTR rgbValue, SQLLEN cbValueMax, SQLLEN *pcbValue);
static int conv_from_octal(const char *s);
@ -242,6 +242,40 @@ static unsigned ODBCINT64 ATOI64U(const char *val)
static void ResolveNumericParam(const SQL_NUMERIC_STRUCT *ns, char *chrform);
static void parse_to_numeric_struct(const char *wv, SQL_NUMERIC_STRUCT *ns, BOOL *overflow);
/*
* field_is_bytea
* 检查oid field_type在数据库中是否为类似bytea的二进制数据类型
* 返回0 表示不是二进制数据类型
* 返回1 表示是二进制数据类型,并且byteaout进行输出
* 有两种字符串输出方式 (由数据库的bytea_output选项控制,分别为hex和escape)
* a. 将数据的每个字节以十六进制输出,在最前面加上 \x (\x010203)
* b. 将数据的每个字节以八进制输出, 每个字节前加上 \ (\001\002\003),但如果是可打印字符,那么还是按字符打出
* 返回2 表示是二进制数据类型,并且rawout进行输出
* 将数据的每个字节以十六进制输出即可
*
*/
#define FIELD_BINARY_BYTEAOUT 1
#define FIELD_BINARY_RAWOUT 2
static int
filed_is_bytea(const OID field_type)
{
int res = 0;
switch (field_type) {
case PG_TYPE_BYTEA:
case PG_TYPE_MYSQL_BINARY:
res = FIELD_BINARY_BYTEAOUT;
break;
case PG_TYPE_RAW:
case PG_TYPE_LONG_RAW:
case PG_TYPE_BLOB:
res = FIELD_BINARY_RAWOUT;
break;
default:
res = 0;
}
return res;
}
/*
* TIMESTAMP <-----> SIMPLE_TIME
* precision support since 7.2.
@ -900,6 +934,7 @@ setup_getdataclass(SQLLEN * const length_return, const char ** const ptr_return,
BOOL changed = FALSE;
int len_for_wcs_term = 0;
bool binary_rawout = false;
#ifdef UNICODE_SUPPORT
char *allocbuf = NULL;
int unicode_count = -1;
@ -907,14 +942,28 @@ setup_getdataclass(SQLLEN * const length_return, const char ** const ptr_return,
BOOL hybrid = FALSE;
#endif /* UNICODE_SUPPORT */
if (PG_TYPE_BYTEA == field_type)
// if (PG_TYPE_BYTEA == field_type)
if (FIELD_BINARY_BYTEAOUT == filed_is_bytea(field_type))
{
//BYTEA类型数据从pg内核发送过来时,会根据参数添加\x表示十六进制
//或者直接收到其二进制裸数据的八进制字符串(\001 \002 \003)
//如果以SQL_C_BINARY接收,则要将字符串转换成二进制字节流
if (SQL_C_BINARY == fCType)
bytea_process_kind = BYTEA_PROCESS_BINARY;
else if (0 == strnicmp(neut_str, "\\x", 2)) /* hex format */
neut_str += 2;
else
bytea_process_kind = BYTEA_PROCESS_ESCAPE;
}
else if (FIELD_BINARY_RAWOUT == filed_is_bytea(field_type))
{
//对于raw调用的rawout,将收到裸数据的十六进制字符串,且前面没有\x
if (SQL_C_BINARY == fCType)
{
bytea_process_kind = BYTEA_PROCESS_BINARY;
binary_rawout = true;
}
}
#ifdef UNICODE_SUPPORT
@ -947,7 +996,7 @@ setup_getdataclass(SQLLEN * const length_return, const char ** const ptr_return,
if (fCType == SQL_C_WCHAR)
{
if (BYTEA_PROCESS_ESCAPE == bytea_process_kind)
unicode_count = convert_from_pgbinary(neut_str, NULL, 0) * 2;
unicode_count = convert_from_pgbinary(neut_str, binary_rawout, NULL, 0) * 2;
else if (hybrid)
{
MYLOG(0, "hybrid estimate\n");
@ -979,7 +1028,7 @@ setup_getdataclass(SQLLEN * const length_return, const char ** const ptr_return,
;
else if (0 != bytea_process_kind)
{
len = convert_from_pgbinary(neut_str, NULL, 0);
len = convert_from_pgbinary(neut_str, binary_rawout, NULL, 0);
if (BYTEA_PROCESS_BINARY != bytea_process_kind)
len *= 2;
changed = TRUE;
@ -1021,7 +1070,7 @@ setup_getdataclass(SQLLEN * const length_return, const char ** const ptr_return,
{
if (BYTEA_PROCESS_ESCAPE == bytea_process_kind)
{
len = convert_from_pgbinary(neut_str, pgdc->ttlbuf, pgdc->ttlbuflen);
len = convert_from_pgbinary(neut_str, binary_rawout, pgdc->ttlbuf, pgdc->ttlbuflen);
len = pg_bin2whex(pgdc->ttlbuf, (SQLWCHAR *) pgdc->ttlbuf, len);
}
else
@ -1055,7 +1104,7 @@ setup_getdataclass(SQLLEN * const length_return, const char ** const ptr_return,
;
else if (0 != bytea_process_kind)
{
len = convert_from_pgbinary(neut_str, pgdc->ttlbuf, pgdc->ttlbuflen);
len = convert_from_pgbinary(neut_str, binary_rawout, pgdc->ttlbuf, pgdc->ttlbuflen);
if (BYTEA_PROCESS_ESCAPE == bytea_process_kind)
len = pg_bin2hex(pgdc->ttlbuf, pgdc->ttlbuf, len);
}
@ -1404,6 +1453,7 @@ MYLOG(0, "null_cvt_date_string=%d\n", conn->connInfo.cvt_null_date_string);
case PG_TYPE_TIMESTAMP_NO_TMZONE:
case PG_TYPE_TIMESTAMP:
case PG_TYPE_SMALLDATETIME:
case PG_TYPE_ORADATE:
std_time.fr = 0;
std_time.infinity = 0;
if (strnicmp(value, INFINITY_STRING, 8) == 0)
@ -1601,6 +1651,10 @@ MYLOG(DETAIL_LOG_LEVEL, "2stime fr=%d\n", std_time.fr);
case PG_TYPE_BYTEA:
text_bin_handling = TRUE;
break;
default:
if (filed_is_bytea(field_type)) {
text_bin_handling = TRUE;
}
}
break;
}
@ -1639,6 +1693,7 @@ MYLOG(DETAIL_LOG_LEVEL, "2stime fr=%d\n", std_time.fr);
case PG_TYPE_DATETIME:
case PG_TYPE_TIMESTAMP_NO_TMZONE:
case PG_TYPE_TIMESTAMP:
case PG_TYPE_ORADATE:
len = stime2timestamp(&std_time, midtemp, midsize, FALSE,
(int) (midsize - 19 - 2) );
break;
@ -5328,7 +5383,7 @@ MYLOG(0, "cvt_null_date_string=%d pgtype=%d send_buf=%p\n", conn->connInfo.cvt_n
qb->errornumber = STMT_EXEC_ERROR;
goto cleanup;
}
if (param_pgtype == PG_TYPE_BYTEA)
if (filed_is_bytea(param_pgtype))
{
if (0 != (qb->flags & FLGB_BINARY_AS_POSSIBLE))
{
@ -6235,7 +6290,7 @@ conv_from_octal(const char *s)
/* convert octal escapes to bytes */
static size_t
convert_from_pgbinary(const char *value, char *rgbValue, SQLLEN cbValueMax)
convert_from_pgbinary(const char *value, bool binary_rawout, char *rgbValue, SQLLEN cbValueMax)
{
size_t i,
ilen = strlen(value);
@ -6272,6 +6327,18 @@ convert_from_pgbinary(const char *value, char *rgbValue, SQLLEN cbValueMax)
i += 4;
}
}
else if (binary_rawout)
{
//rawout, 十六进制,但最前面没有\x
if (i < ilen)
{
ilen -= i;
if (rgbValue)
pg_hex2bin(value + i, rgbValue + o, ilen);
o += ilen / 2;
}
break;
}
else
{
if (rgbValue)

View File

@ -17,10 +17,12 @@ SQLINTEGER V_OD_err,V_OD_rowanz,V_OD_id,V_ID;
SQLSMALLINT V_OD_mlen,V_OD_colanz;
char V_OD_msg[200],V_OD_buffer[200],remark[200],V_OD_buffer1[200];
SQLLEN non_unique_ind,type_ind,index_name_ind,column_name_ind,card_ind,pages_ind;
SQLINTEGER maxlv,minlv,non_unique,type,index_name,column_name,cardinality,pages;
SQLINTEGER maxlv,minlv,non_unique,type,cardinality,pages;
SQLINTEGER m_min,m_max;
SQLCHAR schema[200] = "FVT_INTERFACE";
SQLCHAR table[200] = "odbc_SQLStatistics";
SQLCHAR index_name[200];
SQLCHAR column_name[200];
char *buf = "Mike";
int value = 3;
@ -155,7 +157,7 @@ int main(int argc,char *argv[])
else
printf(" Cardinality = (Unavailable)");
if (pages_ind != SQL_NULL_DATA)
printf(" Pages = ",pages);
printf(" Pages = %d",pages);
else
printf(" Pages = (Unavailable)\n");
}

View File

@ -66,6 +66,15 @@
#define PG_TYPE_NVARCHAR2 3969
#define PG_TYPE_INT1 5545
#define PG_TYPE_SMALLDATETIME 9003
/* binary same as bytea */
#define PG_TYPE_RAW 86
#define PG_TYPE_BLOB 88
#define PG_TYPE_LONG_RAW 94
#define PG_TYPE_MYSQL_BINARY 9779
/* oracle date */
#define PG_TYPE_ORADATE 9040
#define INTERNAL_ASIS_TYPE (-9999)
#define TYPE_MAY_BE_ARRAY(type) ((type) == PG_TYPE_XMLARRAY || ((type) >= 1000 && (type) <= 1041))

View File

@ -0,0 +1,29 @@
diff -Naur a/Drivers/Postgre7.1/info.c b/Drivers/Postgre7.1/info.c
--- a/Drivers/Postgre7.1/info.c 2024-03-19 15:43:10.523054234 +0800
+++ b/Drivers/Postgre7.1/info.c 2024-03-19 15:56:31.788491940 +0800
@@ -1779,14 +1779,14 @@
char index_name[MAX_INFO_STRING];
short fields_vector[8];
char isunique[10], isclustered[10];
-SDWORD index_name_len, fields_vector_len;
+SQLLEN index_name_len, fields_vector_len;
TupleNode *row;
int i;
HSTMT hcol_stmt;
StatementClass *col_stmt, *indx_stmt;
char column_name[MAX_INFO_STRING], relhasrules[MAX_INFO_STRING];
char **column_names = 0;
-Int4 column_name_len;
+SQLLEN column_name_len;
int total_columns = 0;
char error = TRUE;
ConnInfo *ci;
@@ -2136,7 +2136,7 @@
StatementClass *tbl_stmt;
char tables_query[STD_STATEMENT_LEN];
char attname[MAX_INFO_STRING];
-SDWORD attname_len;
+SQLLEN
char pktab[MAX_TABLE_LEN + 1];
Int2 result_cols;

View File

@ -91,7 +91,8 @@ function build_component()
if [ $? -ne 0 ]; then
die "[Error] change dir to $SRC_DIR failed."
fi
patch -p1 < ../CVE-2024-1013.patch
log "[Notice] start autoreconf."
autoreconf -fi
if [ $? -ne 0 ]; then

View File

@ -3,15 +3,25 @@ REM Copyright Huawei Technologies Co., Ltd. 2010-2018. All rights reserved.
setlocal
set WD=%__CD__%
set LIB_SECURITY_DIR=%WD%\..\..\..\..\platform\Huawei_Secure_C\Huawei_Secure_C_V100R001C01SPC010B002
set LIB_GAUSSDB_DIR=%WD%\..\..\..\..\..\server
set LIB_ODBC_DIR=%WD%\..\..
set LIB_SECURITY_DIR=D:\windows_odbc\win32\open_source\Huawei_Secure_C_V100R001C01SPC010B002
set LIB_GAUSSDB_DIR=D:\windows_odbc\win32\open_source\openGauss-server
set LIB_ODBC_DIR=D:\windows_odbc\win32\open_source\openGauss-connector-odbc
set MINGW_DIR=C:\buildtools\mingw-8.1.0\msys32\mingw32
set CMAKE_DIR=C:\buildtools\cmake
set OPENSSL_DIR=D:\GaussDBKernel\open_source\output\openssl-win
set MINGW_DIR=D:\buildtools\mingw-8.1.0\msys64\mingw32
set CMAKE_DIR=D:\env\cmake-3.26
REM openss compiled direction
set OPENSSL_DIR=D:\windows_odbc\win32\open_source\output\openssl-win32
set p7zip=D:\install\7-Zip
set OUTPUT_DIR=%LIB_ODBC_DIR%/odbc_output
if not exist %OPENSSL_DIR%/libcrypto-1_1.dll (
cd %WD%
REM Build openssl
call openssl.bat
)
cd %WD%
REM Build libsecurec.lib
cp win32/libpq/CMakeLists-huawei-securec.txt %LIB_SECURITY_DIR%/CMakeLists.txt
cd %LIB_SECURITY_DIR%
@ -20,21 +30,23 @@ mkdir build
cd build
cmake -DMINGW_DIR="%MINGW_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
make
cd %WD%
cd %WD%
REM Build libpq.lib
rm -rf %LIB_GAUSSDB_DIR%/libpq-win32
cp -r win32/libpq %LIB_GAUSSDB_DIR%/libpq-win32
cd %LIB_GAUSSDB_DIR%/libpq-win32
cp -r %LIB_SECURITY_DIR%/output ./lib
bash -l %LIB_GAUSSDB_DIR%/libpq-win32/project.sh
bash %LIB_GAUSSDB_DIR%/libpq-win32/project.sh
rm -rf build
mkdir build
cd build
cmake -DMINGW_DIR="%MINGW_DIR%" -DOPENSSL_DIR="%OPENSSL_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
sed -i 's/LIB_CRYPTO-NOTFOUND/D:\/windows_odbc\/win32\/open_source\/output\/openssl-win32\/libcrypto-1_1.dll/g' CMakeCache.txt
sed -i 's/LIB_SSL-NOTFOUND/D:\/windows_odbc\/win32\/open_source\/output\/openssl-win32\/libssl-1_1.dll/g' CMakeCache.txt
make
cd %WD%
cd %WD%
REM Build psqlodbc35w.lib
cd %LIB_ODBC_DIR%
rm -rf libpq
@ -45,9 +57,11 @@ rm -rf build
mkdir build
cd build
cmake -DMINGW_DIR="%MINGW_DIR%" -DOPENSSL_DIR="%OPENSSL_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
sed -i 's/LIB_CRYPTO-NOTFOUND/D:\/windows_odbc\/win32\/open_source\/output\/openssl-win32\/libcrypto-1_1.dll/g' CMakeCache.txt
sed -i 's/LIB_SSL-NOTFOUND/D:\/windows_odbc\/win32\/open_source\/output\/openssl-win32\/libssl-1_1.dll/g' CMakeCache.txt
make
cd %WD%
cd %WD%
REM Build psqlodbc.exe
cd psqlodbc-installer
rm -rf win32_dll
@ -63,13 +77,9 @@ mkdir odbc_output
cp psqlodbc-installer/psqlodbc.exe odbc_output
rm -rf psqlodbc-installer/psqlodbc.exe
cd odbc_output
%p7zip%\7z.exe a GaussDB-Kernel-V500R002C10-Windows-Odbc-X86.tar *
%p7zip%\7z.exe a -tgzip GaussDB-Kernel-V500R002C10-Windows-Odbc-X86.tar.gz *.tar
del *.tar
%p7zip%\7z.exe a -tgzip openGauss-5.0.0-ODBC-windows.tar.gz ./*
set OUTPUT_DIR=%LIB_ODBC_DIR%/output
rm -rf "%OUTPUT_DIR%"
mkdir "%OUTPUT_DIR%"
cp GaussDB-Kernel-V500R002C00-Windows-Odbc-X86.tar.gz %OUTPUT_DIR%
cp -r openGauss-5.0.0-ODBC-windows.tar.gz %OUTPUT_DIR%

21
windows/build/openssl.bat Normal file
View File

@ -0,0 +1,21 @@
REM Copyright Huawei Technologies Co., Ltd. 2010-2018. All rights reserved.
@echo off
setlocal
set WD=%__CD__%
REM openssl source direction
set OPENSSL_SOURCE_DIR=D:\windows_odbc\win32\open_source\openssl-OpenSSL_1_1_1n\openssl-OpenSSL_1_1_1n
set MSYS_SHELL=D:\buildtools\mingw-8.1.0\msys64\msys2_shell.cmd
cd %WD%
REM build openssl
cd %OPENSSL_SOURCE_DIR%
REM openssl config
rm -rf openssl-win32
%MSYS_SHELL% -defterm -mingw32 -no-start -full-path -here -c './Configure ^
--prefix=$PWD/openssl-win32 ^
shared mingw no-tests; make -j20; make install -j20; ^
cp $PWD/openssl-win32/bin/libssl-1_1.dll $PWD/openssl-win32; ^
cp $PWD/openssl-win32/bin/libcrypto-1_1.dll $PWD/openssl-win32; ^
rm -rf $PWD/../../output; ^
mkdir -p $PWD/../../output; mv $PWD/openssl-win32 $PWD/../../output/.' ^

View File

@ -5,7 +5,7 @@ SET(CMAKE_VERBOSE_MAKEFILEON ON)
MESSAGE(STATUS "Building LIBSECUREC Library.")
IF(NOT DEFINED MINGW_DIR)
set(MINGW_DIR "D:\\msys32\\mingw32")
set(MINGW_DIR "D:\\buildtools\\mingw-8.1.0\\msys64\\mingw32")
ENDIF(NOT DEFINED MINGW_DIR)
SET(PWD_DIR ${CMAKE_CURRENT_SOURCE_DIR})

View File

@ -6,7 +6,7 @@ SET(CMAKE_VERBOSE_MAKEFILEON ON)
MESSAGE(STATUS "Building LIBPQ Library.")
IF(NOT DEFINED OPENSSL_DIR)
set(OPENSSL_DIR "D:\\Program_Files\\OpenSSL-Win32")
set(OPENSSL_DIR "D:\\windows_odbc\\win32\\open_source\\output\\openssl-win32")
ENDIF(NOT DEFINED OPENSSL_DIR)
IF(NOT DEFINED MINGW_DIR)
set(MINGW_DIR "D:\\buildtools\\mingw-8.1.0\\msys32\\mingw32")

View File

@ -3,7 +3,7 @@
#################################################################
ifndef $(OPENSSL_DIR)
OPENSSL_DIR:=/d/Program_Files/OpenSSL-Win32
OPENSSL_DIR:=/d/windows_odbc/win32/open_source/output/openssl-win32
endif
ifndef $(MINGW_DIR)

View File

@ -1,446 +1,449 @@
# Copyright Huawei Technologies Co., Ltd. 2010-2018. All rights reserved.
#!/bin/bash
MD="mkdir -p"
RM="rm -rf"
CP="cp -r"
ROOT_DIR=$LIB_GAUSSDB_DIR
#ROOT_DIR=`pwd`/..
SRC_DIR=$ROOT_DIR/../open_source/opengauss/src
LIBPQ_WIN32_DIR=$ROOT_DIR/libpq-win32
PREPARED_DIR=$LIBPQ_WIN32_DIR
EXPORT_DIR=$LIBPQ_WIN32_DIR/libpq-export
### function ###
function copy_file()
{
file=$1 #file name
src=$2 #source directory
dst=$3 #target directory
if [ ! -f "$src"/"$file" ];then
echo "Error: $src/$file doesn't exist, exit."
exit -1
fi
if [ ! -d $dst ];then
$MD $dst
fi
#echo "Copy $src/$file to $dst/$file"
$CP $src/$file $dst/$file
}
### function ###
function init_win_project()
{
if [ ! -f "$PREPARED_DIR"/include/pg_config.h ]; then
echo "Error: Header file pg_config.h for Windows lost, exit."
exit -1
fi
if [ ! -f "$PREPARED_DIR"/include/pg_config_os.h ]; then
echo "Error: Header file pg_config_os.h for Windows lost, exit."
exit -1
fi
if [ ! -f "$PREPARED_DIR"/include/pg_config_paths.h ]; then
echo "Error: Header file pg_config_paths.h for Windows lost, exit."
exit -1
fi
if [ ! -f "$PREPARED_DIR"/include/errcodes.h ]; then
echo "Error: Header file errcodes.h for Windows lost, exit."
exit -1
fi
if [ ! -f "$PREPARED_DIR"/include/libpqdll.def ]; then
echo "Error: Interface definition file libpqdll.def for Windows lost, exit."
exit -1
fi
if [ ! -f "$PREPARED_DIR"/Makefile ];then
echo "Error: Makefile for MinGW complier lost, exit."
exit -1
fi
if [ ! -f "$PREPARED_DIR"/CMakeLists.txt ];then
echo "Error: CMakeLists.txt for CMake && MinGW complier lost, exit."
exit -1
fi
# $RM $LIBPQ_WIN32_DIR/include
$RM $LIBPQ_WIN32_DIR/src
if [ ! -d "$LIBPQ_WIN32_DIR"/lib ];then
$MD $LIBPQ_WIN32_DIR/lib
fi
}
### function ###
function copy_headers()
{ # copy header files
# copy form prepared directory
copy_file securec.h $LIB_SECURITY_DIR/include $LIBPQ_WIN32_DIR/include
copy_file securectype.h $LIB_SECURITY_DIR/include $LIBPQ_WIN32_DIR/include
#copy_file pg_config.h $PREPARED_DIR $LIBPQ_WIN32_DIR/include
#copy_file pg_config_os.h $PREPARED_DIR $LIBPQ_WIN32_DIR/include
# include
copy_file c.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file cipher.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file datatypes.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file getaddrinfo.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file gs_thread.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file gs_threadlocal.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file pg_config_manual.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file port.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file postgres.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file postgres_ext.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file postgres_fe.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file securec_check.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
# include/access
copy_file attnum.h $SRC_DIR/include/access $LIBPQ_WIN32_DIR/include/access
copy_file tupdesc.h $SRC_DIR/include/access $LIBPQ_WIN32_DIR/include/access
# include/catlog
copy_file genbki.h $SRC_DIR/include/catalog $LIBPQ_WIN32_DIR/include/catalog
copy_file pg_attribute.h $SRC_DIR/include/catalog $LIBPQ_WIN32_DIR/include/catalog
# include/client_logic
copy_file cache.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
copy_file client_logic.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
copy_file client_logic_enums.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
copy_file cstrings_map.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
# include/gstrace
copy_file gstrace_infra.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
copy_file gstrace_infra_int.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
copy_file gstrace_tool.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
# include/libcomm
#copy_file libcomm.h $SRC_DIR/include/libcomm $LIBPQ_WIN32_DIR/include/libcomm
# include/libpq
copy_file auth.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file be-fsstubs.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file cl_state.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file crypt.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file guc_vars.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file hba.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file ip.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq-be.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq-events.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq-fe.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq-fs.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq-int.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file md5.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file pqcomm.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file pqexpbuffer.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file pqformat.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file pqsignal.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file sha2.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
# include/mb
copy_file pg_wchar.h $SRC_DIR/include/mb $LIBPQ_WIN32_DIR/include/mb
# include/nodes
copy_file nodes.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
copy_file params.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
copy_file parsenodes_common.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
copy_file pg_list.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
copy_file primnodes.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
copy_file value.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
# include/parser
copy_file backslash_quotes.h $SRC_DIR/include/parser $LIBPQ_WIN32_DIR/include/parser
# include/port/win32
copy_file dlfcn.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
copy_file grp.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
copy_file netdb.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
copy_file pwd.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
# include/port/win32/arpa
copy_file inet.h $SRC_DIR/include/port/win32/arpa $LIBPQ_WIN32_DIR/include/port/win32/arpa
# include/port/win32/netinet
copy_file in.h $SRC_DIR/include/port/win32/netinet $LIBPQ_WIN32_DIR/include/port/win32/netinet
# include/port/win32/sys
copy_file socket.h $SRC_DIR/include/port/win32/sys $LIBPQ_WIN32_DIR/include/port/win32/sys
copy_file wait.h $SRC_DIR/include/port/win32/sys $LIBPQ_WIN32_DIR/include/port/win32/sys
# include/port/win32_msvc
copy_file dirent.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
copy_file unistd.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
copy_file utime.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
# include/port/win32_msvc/sys
copy_file file.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
copy_file param.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
copy_file time.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
# include/storage
copy_file spin.h $SRC_DIR/include/storage $LIBPQ_WIN32_DIR/include/storage
# include/storage/lock
copy_file pg_sema.h $SRC_DIR/include/storage/lock $LIBPQ_WIN32_DIR/include/storage/lock
copy_file s_lock.h $SRC_DIR/include/storage/lock $LIBPQ_WIN32_DIR/include/storage/lock
# include/utils
copy_file be_module.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
copy_file elog.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
copy_file palloc.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
copy_file pg_crc.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
copy_file pg_crc_tables.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
copy_file syscall_lock.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
# copy from prepared directory
copy_file errcodes.h $PREPARED_DIR/include $LIBPQ_WIN32_DIR/include/utils # !!!! special source directory
}
function copy_codes()
{
# src/common/backend/libpq
copy_file ip.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
copy_file md5.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
copy_file sha2.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
# src/common/backend/utils/mb
copy_file encnames.cpp $SRC_DIR/common/backend/utils/mb $LIBPQ_WIN32_DIR/src/common/backend/utils/mb
copy_file wchar.cpp $SRC_DIR/common/backend/utils/mb $LIBPQ_WIN32_DIR/src/common/backend/utils/mb
# src/common/interfaces/libpq
copy_file fe-auth.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-auth.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-connect.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-exec.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-lobj.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-misc.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-print.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-protocol2.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-protocol3.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-secure.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file libpq-events.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file pqexpbuffer.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file pqsignal.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file pqsignal.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file pthread-win32.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file win32.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file win32.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
# copy interface definition file from prepared directory
copy_file libpqdll.def $PREPARED_DIR/include $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
# src/common/interfaces/libpq/client_logic_cache
copy_file cache_loader.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cache_loader.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_column_manager.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_global_setting.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file column_settings_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file global_settings_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file icached_columns.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file types_to_oid.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cache_refresh_type.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_column_setting.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_setting.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file columns_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file icached_column.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file schemas_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_column.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_columns.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file column_hook_executors_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file dataTypes.def \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file icached_column_manager.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file search_path_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
# src/common/interfaces/libpq/client_logic_common
copy_file client_logic_utils.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
copy_file col_full_name.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
copy_file cstring_oid_map.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
copy_file pg_client_logic_params.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
copy_file statement_data.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
copy_file table_full_name.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
# src/common/interfaces/libpq/client_logic_hooks
copy_file abstract_hook_executor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
copy_file column_hook_executor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
copy_file global_hook_executor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
copy_file hook_resource.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
copy_file hooks_factory.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
copy_file hooks_manager.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
# src/common/interfaces/libpq/client_logic_processor
copy_file create_stmt_processor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file prepared_statement.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file processor_utils.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file raw_values_cont.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file stmt_processor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file where_clause_processor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file encryption_pre_process.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file prepared_statements_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file raw_value.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file raw_values_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file values_processor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
# src/common/interfaces/libpq/frontend_parser
copy_file datatypes.h \
$SRC_DIR/common/interfaces/libpq/frontend_parser \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/frontend_parser
copy_file Parser.h \
$SRC_DIR/common/interfaces/libpq/frontend_parser \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/frontend_parser
# src/common/port
copy_file chklocale.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file dirent.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file getaddrinfo.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file gs_readdir.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file gs_syscall_lock.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file inet_net_ntop.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file path.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file pgsleep.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file pthread-win32.h $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file thread.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file win32error.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file cipher.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file dirmod.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file gs_env_r.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file gs_strerror.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file inet_aton.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file noblock.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file pgstrcasecmp.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file strlcpy.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file win32env.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file win32setlocale.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
# copy from prepared directory
copy_file pg_config_paths.h $PREPARED_DIR/include $LIBPQ_WIN32_DIR/src/common/port
}
function copy_makefiles()
{
copy_file Makefile $PREPARED_DIR $LIBPQ_WIN32_DIR
copy_file CMakeLists.txt $PREPARED_DIR $LIBPQ_WIN32_DIR
}
function generate_libpq_export_files()
{
copy_file auth.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file be-fsstubs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file guc_vars.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq-be.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq-int.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file pqformat.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file be-fsstubs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file hba.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq-events.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file md5.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file pqsignal.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file cl_state.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file ip.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq-fe.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file pqcomm.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file sha2.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file crypt.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq-fs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file pqexpbuffer.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file gs_thread.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
copy_file postgres_ext.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
copy_file gs_threadlocal.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
if [ ! -d "$EXPORT_DIR"/lib ];then
$MD $EXPORT_DIR/lib
fi
}
### function ###
function __main__()
{
echo "Start."
echo -n "Step[1] - initialize libpq project directory for Windows ... "
init_win_project
echo "done."
echo -n "Step[2] - copy libpq header files ... "
copy_headers
echo "done."
echo -n "Step[3] - copy libpq source code files ... "
copy_codes
echo "done."
echo -n "Step[4] - prepare Makefile && CMakeLists.txt files for compilation ... "
copy_makefiles
echo "done."
echo -n "Step[5] - generate export directory and files ... "
generate_libpq_export_files
echo "done."
echo "Done."
}
function __clean__()
{
$RM $LIBPQ_WIN32_DIR/include
$RM $LIBPQ_WIN32_DIR/lib
$RM $LIBPQ_WIN32_DIR/libpq-export
$RM $LIBPQ_WIN32_DIR/src
$RM $LIBPQ_WIN32_DIR/CMakeLists.txt
$RM $LIBPQ_WIN32_DIR/Makefile
}
### main ###
if [ $# -eq 0 ];then
__main__
exit 0
fi
if [ $# -eq 1 -a "x$1" = "xclean" ];then
__clean__
exit 0
fi
echo "Usage: \"sh $0\" for initialization or \"sh $0 clean\" for cleaning."
#!/bin/bash
MD="mkdir -p"
RM="rm -rf"
CP="cp -r"
# ROOT_DIR=$LIB_GAUSSDB_DIR
ROOT_DIR=$(pwd)/..
SRC_DIR=$ROOT_DIR/../openGauss-server/src
LIBPQ_WIN32_DIR=$ROOT_DIR/libpq-win32
PREPARED_DIR=$LIBPQ_WIN32_DIR/
EXPORT_DIR=$LIBPQ_WIN32_DIR/libpq-export
LIB_SECURITY_DIR=$ROOT_DIR/../Huawei_Secure_C_V100R001C01SPC010B002
### function ###
function copy_file()
{
file=$1 #file name
src=$2 #source directory
dst=$3 #target directory
if [ ! -f "$src"/"$file" ];then
echo "Error: $src/$file doesn't exist, exit."
exit 1
fi
if [ ! -d $dst ];then
$MD $dst
fi
#echo "Copy $src/$file to $dst/$file"
$CP $src/$file $dst/$file
}
### function ###
function init_win_project()
{
if [ ! -f "$PREPARED_DIR"/include/pg_config.h ]; then
echo "Error: Header file pg_config.h for Windows lost, exit."
exit 1
fi
if [ ! -f "$PREPARED_DIR"/include/pg_config_os.h ]; then
echo "Error: Header file pg_config_os.h for Windows lost, exit."
exit 1
fi
if [ ! -f "$PREPARED_DIR"/include/pg_config_paths.h ]; then
echo "Error: Header file pg_config_paths.h for Windows lost, exit."
exit 1
fi
if [ ! -f "$PREPARED_DIR"/include/errcodes.h ]; then
echo "Error: Header file errcodes.h for Windows lost, exit."
exit 1
fi
if [ ! -f "$PREPARED_DIR"/include/libpqdll.def ]; then
echo "Error: Interface definition file libpqdll.def for Windows lost, exit."
exit 1
fi
if [ ! -f "$PREPARED_DIR"/Makefile ];then
echo "Error: Makefile for MinGW complier lost, exit."
exit 1
fi
if [ ! -f "$PREPARED_DIR"/CMakeLists.txt ];then
echo "Error: CMakeLists.txt for CMake && MinGW complier lost, exit."
exit 1
fi
# $RM $LIBPQ_WIN32_DIR/include
$RM $LIBPQ_WIN32_DIR/src
if [ ! -d "$LIBPQ_WIN32_DIR"/lib ];then
$MD $LIBPQ_WIN32_DIR/lib
fi
}
### function ###
function copy_headers()
{ # copy header files
# copy form prepared directory
copy_file securec.h $LIB_SECURITY_DIR/include $LIBPQ_WIN32_DIR/include
copy_file securectype.h $LIB_SECURITY_DIR/include $LIBPQ_WIN32_DIR/include
#copy_file pg_config.h $PREPARED_DIR $LIBPQ_WIN32_DIR/include
#copy_file pg_config_os.h $PREPARED_DIR $LIBPQ_WIN32_DIR/include
# include
copy_file c.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file cipher.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file datatypes.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file getaddrinfo.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file gs_thread.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file gs_threadlocal.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file pg_config_manual.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file port.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file postgres.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file postgres_ext.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file postgres_fe.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
copy_file securec_check.h $SRC_DIR/include $LIBPQ_WIN32_DIR/include
# include/access
copy_file attnum.h $SRC_DIR/include/access $LIBPQ_WIN32_DIR/include/access
copy_file tupdesc.h $SRC_DIR/include/access $LIBPQ_WIN32_DIR/include/access
# include/catlog
copy_file genbki.h $SRC_DIR/include/catalog $LIBPQ_WIN32_DIR/include/catalog
copy_file pg_attribute.h $SRC_DIR/include/catalog $LIBPQ_WIN32_DIR/include/catalog
# include/client_logic
copy_file cache.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
copy_file client_logic.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
copy_file client_logic_enums.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
copy_file cstrings_map.h $SRC_DIR/include/client_logic $LIBPQ_WIN32_DIR/include/client_logic
# include/gstrace
copy_file gstrace_infra.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
copy_file gstrace_infra_int.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
copy_file gstrace_tool.h $SRC_DIR/include/gstrace $LIBPQ_WIN32_DIR/include/gstrace
#include/lib
copy_file stringinfo.h $SRC_DIR/include/lib $LIBPQ_WIN32_DIR/include/lib
# include/libcomm
#copy_file libcomm.h $SRC_DIR/include/libcomm $LIBPQ_WIN32_DIR/include/libcomm
# include/libpq
copy_file auth.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file be-fsstubs.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file cl_state.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file crypt.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file guc_vars.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file hba.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file ip.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq-be.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq-events.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq-fe.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq-fs.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file libpq-int.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file md5.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file pqcomm.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file pqexpbuffer.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file pqformat.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file pqsignal.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
copy_file sha2.h $SRC_DIR/include/libpq $LIBPQ_WIN32_DIR/include/libpq
# include/mb
copy_file pg_wchar.h $SRC_DIR/include/mb $LIBPQ_WIN32_DIR/include/mb
# include/nodes
copy_file nodes.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
copy_file params.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
copy_file parsenodes_common.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
copy_file pg_list.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
copy_file primnodes.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
copy_file value.h $SRC_DIR/include/nodes $LIBPQ_WIN32_DIR/include/nodes
# include/parser
copy_file backslash_quotes.h $SRC_DIR/include/parser $LIBPQ_WIN32_DIR/include/parser
# include/port/win32
copy_file dlfcn.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
copy_file grp.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
copy_file netdb.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
copy_file pwd.h $SRC_DIR/include/port/win32 $LIBPQ_WIN32_DIR/include/port/win32
# include/port/win32/arpa
copy_file inet.h $SRC_DIR/include/port/win32/arpa $LIBPQ_WIN32_DIR/include/port/win32/arpa
# include/port/win32/netinet
copy_file in.h $SRC_DIR/include/port/win32/netinet $LIBPQ_WIN32_DIR/include/port/win32/netinet
# include/port/win32/sys
copy_file socket.h $SRC_DIR/include/port/win32/sys $LIBPQ_WIN32_DIR/include/port/win32/sys
copy_file wait.h $SRC_DIR/include/port/win32/sys $LIBPQ_WIN32_DIR/include/port/win32/sys
# include/port/win32_msvc
copy_file dirent.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
copy_file unistd.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
copy_file utime.h $SRC_DIR/include/port/win32_msvc $LIBPQ_WIN32_DIR/include/port/win32_msvc
# include/port/win32_msvc/sys
copy_file file.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
copy_file param.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
copy_file time.h $SRC_DIR/include/port/win32_msvc/sys $LIBPQ_WIN32_DIR/include/port/win32_msvc/sys
# include/storage
copy_file spin.h $SRC_DIR/include/storage $LIBPQ_WIN32_DIR/include/storage
# include/storage/lock
copy_file pg_sema.h $SRC_DIR/include/storage/lock $LIBPQ_WIN32_DIR/include/storage/lock
copy_file s_lock.h $SRC_DIR/include/storage/lock $LIBPQ_WIN32_DIR/include/storage/lock
# include/utils
copy_file be_module.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
copy_file elog.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
copy_file palloc.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
copy_file pg_crc.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
copy_file pg_crc_tables.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
copy_file syscall_lock.h $SRC_DIR/include/utils $LIBPQ_WIN32_DIR/include/utils
# copy from prepared directory
copy_file errcodes.h $PREPARED_DIR/include $LIBPQ_WIN32_DIR/include/utils # !!!! special source directory
}
function copy_codes()
{
# src/common/backend/libpq
copy_file ip.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
copy_file md5.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
copy_file sha2.cpp $SRC_DIR/common/backend/libpq $LIBPQ_WIN32_DIR/src/common/backend/libpq
# src/common/backend/utils/mb
copy_file encnames.cpp $SRC_DIR/common/backend/utils/mb $LIBPQ_WIN32_DIR/src/common/backend/utils/mb
copy_file wchar.cpp $SRC_DIR/common/backend/utils/mb $LIBPQ_WIN32_DIR/src/common/backend/utils/mb
# src/common/interfaces/libpq
copy_file fe-auth.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-auth.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-connect.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-exec.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-lobj.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-misc.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-print.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-protocol2.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-protocol3.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file fe-secure.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file libpq-events.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file pqexpbuffer.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file pqsignal.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file pqsignal.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file pthread-win32.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file win32.cpp $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
copy_file win32.h $SRC_DIR/common/interfaces/libpq $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
# copy interface definition file from prepared directory
copy_file libpqdll.def $PREPARED_DIR/include $LIBPQ_WIN32_DIR/src/common/interfaces/libpq
# src/common/interfaces/libpq/client_logic_cache
copy_file cache_loader.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cache_loader.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_column_manager.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_global_setting.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file column_settings_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file global_settings_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file icached_columns.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file types_to_oid.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cache_refresh_type.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_column_setting.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_setting.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file columns_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file icached_column.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file schemas_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_column.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file cached_columns.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file column_hook_executors_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file dataTypes.def \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file icached_column_manager.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
copy_file search_path_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_cache \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_cache
# src/common/interfaces/libpq/client_logic_common
copy_file client_logic_utils.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
copy_file col_full_name.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
copy_file cstring_oid_map.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
copy_file pg_client_logic_params.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
copy_file statement_data.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
copy_file table_full_name.h \
$SRC_DIR/common/interfaces/libpq/client_logic_common \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_common
# src/common/interfaces/libpq/client_logic_hooks
copy_file abstract_hook_executor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
copy_file column_hook_executor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
copy_file global_hook_executor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
copy_file hook_resource.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
copy_file hooks_factory.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
copy_file hooks_manager.h \
$SRC_DIR/common/interfaces/libpq/client_logic_hooks \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_hooks
# src/common/interfaces/libpq/client_logic_processor
copy_file create_stmt_processor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file prepared_statement.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file processor_utils.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file raw_values_cont.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file stmt_processor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file where_clause_processor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file encryption_pre_process.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file prepared_statements_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file raw_value.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file raw_values_list.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
copy_file values_processor.h \
$SRC_DIR/common/interfaces/libpq/client_logic_processor \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/client_logic_processor
# src/common/interfaces/libpq/frontend_parser
copy_file datatypes.h \
$SRC_DIR/common/interfaces/libpq/frontend_parser \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/frontend_parser
copy_file Parser.h \
$SRC_DIR/common/interfaces/libpq/frontend_parser \
$LIBPQ_WIN32_DIR/src/common/interfaces/libpq/frontend_parser
# src/common/port
copy_file chklocale.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file dirent.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file getaddrinfo.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file gs_readdir.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file gs_syscall_lock.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file inet_net_ntop.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file path.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file pgsleep.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file pthread-win32.h $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file thread.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file win32error.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file cipher.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file dirmod.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file gs_env_r.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file gs_strerror.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file inet_aton.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file noblock.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file pgstrcasecmp.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file strlcpy.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file win32env.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
copy_file win32setlocale.cpp $SRC_DIR/common/port $LIBPQ_WIN32_DIR/src/common/port
# copy from prepared directory
copy_file pg_config_paths.h $PREPARED_DIR/include $LIBPQ_WIN32_DIR/src/common/port
}
function copy_makefiles()
{
copy_file Makefile $PREPARED_DIR $LIBPQ_WIN32_DIR
copy_file CMakeLists.txt $PREPARED_DIR $LIBPQ_WIN32_DIR
}
function generate_libpq_export_files()
{
copy_file auth.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file be-fsstubs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file guc_vars.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq-be.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq-int.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file pqformat.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file be-fsstubs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file hba.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq-events.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file md5.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file pqsignal.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file cl_state.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file ip.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq-fe.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file pqcomm.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file sha2.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file crypt.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file libpq-fs.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file pqexpbuffer.h $LIBPQ_WIN32_DIR/include/libpq $EXPORT_DIR/include/libpq
copy_file gs_thread.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
copy_file postgres_ext.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
copy_file gs_threadlocal.h $LIBPQ_WIN32_DIR/include $EXPORT_DIR/include
if [ ! -d "$EXPORT_DIR"/lib ];then
$MD $EXPORT_DIR/lib
fi
}
### function ###
function __main__()
{
echo "Start."
echo -n "Step[1] - initialize libpq project directory for Windows ... "
init_win_project
echo "done."
echo -n "Step[2] - copy libpq header files ... "
copy_headers
echo "done."
echo -n "Step[3] - copy libpq source code files ... "
copy_codes
echo "done."
echo -n "Step[4] - prepare Makefile && CMakeLists.txt files for compilation ... "
copy_makefiles
echo "done."
echo -n "Step[5] - generate export directory and files ... "
generate_libpq_export_files
echo "done."
echo "Done."
}
function __clean__()
{
$RM $LIBPQ_WIN32_DIR/include
$RM $LIBPQ_WIN32_DIR/lib
$RM $LIBPQ_WIN32_DIR/libpq-export
$RM $LIBPQ_WIN32_DIR/src
$RM $LIBPQ_WIN32_DIR/CMakeLists.txt
$RM $LIBPQ_WIN32_DIR/Makefile
}
### main ###
if [ $# -eq 0 ];then
__main__
exit 0
fi
if [ $# -eq 1 -a "x$1" = "xclean" ];then
__clean__
exit 0
fi
echo "Usage: \"sh $0\" for initialization or \"sh $0 clean\" for cleaning."

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -0,0 +1,302 @@
# odbc-win32编译指导
## 1、下载并配置环境变量
odbc编译windows32位软件包,需要下面的依赖
### 1.1下载下面的软件包
| 下载的软件包 | 官方地址 |
| :----------- | :----------------------------------------------------------- |
| msys2 | https://www.msys2.org/ |
| mingw32 | https://udomain.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/8.1.0/threads-posix/sjlj/i686-8.1.0-release-posix-sjlj-rt_v6-rev0.7z |
| cmake | https://cmake.org/download/ |
| nsis | https://nsis.sourceforge.io/Download |
| 7zip | https://7-zip.org/download.html |
### 1.2配置环境变量
<img src="odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230321200733264.png" alt="image-20230321200733264" />
**注意:**
- 安装完msys2和mingw32,将mingw32目录覆盖msys2目录下的mingw32目录,并将覆盖后的mingw32/bin目录下mingw32-make.exe重命名make.exe
- 修改msys2的镜像源,可以参考[华为镜像源](https://mirrors.huaweicloud.com/home)
<img src="odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230321195408892.png" alt="image-20230321195408892" style="zoom:80%;" />
- 配置完镜像源,打开msys2控制台,下载一些必要的环境依赖
```shell
# 更新软件包数据
pacman -Syu
# 下载一些必要的软件
pacman -S --needed base-devel
```
### 1.3验证环境变量
```shell
验证perl -v,make -v, cmake -version, gcc -v, g++ -v, sed是否存在
```
## 2、准备源代码
odbc编译windows32需要的代码有,openssl,安全函数,openGauss-connector-odbc,openGauss-server;其中openssl和安全函数都在社区的三方库中
| 代码名称 | 代码仓库 |
| ------------------------ | ------------------------------------------------------------ |
| openssl | https://gitee.com/opengauss/openGauss-third_party/blob/master/dependency/openssl/openssl-OpenSSL_1_1_1n.tar.gz |
| 安全函数 | https://gitee.com/opengauss/openGauss-third_party/raw/master/platform/Huawei_Secure_C/Huawei_Secure_C_V100R001C01SPC010B002.zip |
| openGauss-connector-odbc | https://gitee.com/opengauss/openGauss-connector-odbc.git |
| openGauss-server | https://gitee.com/opengauss/openGauss-server.git |
## 3、编译odbc
首先先将上面的源代码,统一放到一个文件夹下,这样是为了方便规划,比如我这边是将上面4个源代码,放到window_odbc/win32/open_source路径下
![image-20230322095314026](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322095314026.png)
**脚本介绍**
在openGauss-connector-odbc\windows\build路径下有两个脚本,一个是openssl.bat编译openssl,一个是odbc.bat编译odbc
odbc.bat脚本的最开始,是一些环境变量和代码的路径,需要根据自己实际路径配置下
```shell
set WD=%__CD__%
set LIB_SECURITY_DIR=D:\windows_odbc\win32\open_source\Huawei_Secure_C_V100R001C01SPC010B002
set LIB_GAUSSDB_DIR=D:\windows_odbc\win32\open_source\openGauss-server
set LIB_ODBC_DIR=D:\windows_odbc\win32\open_source\openGauss-connector-odbc
set MINGW_DIR=D:\buildtools\mingw-8.1.0\msys64\mingw32
set CMAKE_DIR=D:\env\cmake-3.26
REM openss compiled direction
set OPENSSL_DIR=D:\windows_odbc\win32\open_source\output\openssl-win32
set p7zip=D:\install\7-Zip
set OUTPUT_DIR=%LIB_ODBC_DIR%/odbc_output
```
### 3.1编译openssl
在odbc.bat脚本中调用openssl.bat编译openssl
```shell
if not exist %OPENSSL_DIR%/libcrypto-1_1.dll (
cd %WD%
REM Build openssl
call openssl.bat
)
```
openssl.bat脚本的内容
```shell
cd %WD%
REM build openssl
cd %OPENSSL_DIR%
REM openssl config
%MSYS_SHELL% -defterm -mingw32 -no-start -full-path -here -c './Configure ^
--prefix=$PWD/openssl-win32 ^
shared mingw no-tests; make -j20; make install -j20; ^
cp $PWD/openssl-win32/bin/libssl-1_1.dll $PWD/openssl-win32; ^
cp $PWD/openssl-win32/bin/libcrypto-1_1.dll $PWD/openssl-win32; ^
rm -rf $PWD/../../output; ^
mkdir -p $PWD/../../output; mv $PWD/openssl-win32 $PWD/../../output/.' ^
```
**编译结果**
![image-20230322115658122](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322115658122.png)
同时在window_odbc/win32/open_source/output路径中也会生成openssl-win32的文件夹
![image-20230322115736573](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322115736573.png)
### 3.2编译libsecurec.lib
```shell
cd %WD%
REM Build libsecurec.lib
cp win32/libpq/CMakeLists-huawei-securec.txt %LIB_SECURITY_DIR%/CMakeLists.txt
cd %LIB_SECURITY_DIR%
rm -rf build
mkdir build
cd build
cmake -DMINGW_DIR="%MINGW_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
make
```
**编译结果**
![image-20230322153805967](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322153805967.png)
安全函数编译出的libsecurec.lib会在安全函数的output目录下
![image-20230322153855140](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322153855140.png)
### 3.3编译libpq.lib
```shell
cd %WD%
REM Build libpq.lib
rm -rf %LIB_GAUSSDB_DIR%/libpq-win32
cp -r win32/libpq %LIB_GAUSSDB_DIR%/libpq-win32
cd %LIB_GAUSSDB_DIR%/libpq-win32
cp -r %LIB_SECURITY_DIR%/output ./lib
bash %LIB_GAUSSDB_DIR%/libpq-win32/project.sh
rm -rf build
mkdir build
cd build
cmake -DMINGW_DIR="%MINGW_DIR%" -DOPENSSL_DIR="%OPENSSL_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
make
```
注意:
- 在编译libpq.lib的时候,要确保project.sh执行成功,sh可以在git控制台执行
![image-20230322155042421](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322155042421.png)
- 修改dirmod.cpp
```c
45行注释掉 // #include "storage/file/fio_device.h"
87行增加
bool is_file_delete(int err)
{
return (err == ENOENT);
}
```
- 修改gs_readdir.cpp
```c
31行注释掉 // #include "storage/file/fio_device.h"
```
**编译结果**
如果遇到下面的问题,说明是openssl没有找到
![image-20230322161142228](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322161142228.png)
解决方法:手动修改D:\windows_odbc\win32\open_source\openGauss-server\libpq-win32\build目录下的CMakeCache.txt文件
![image-20230322161255741](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322161255741.png)
修改LIB_CRYPTO和LIB_SSL的环境依赖
![image-20230322161333409](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322161333409.png)
重新make
![image-20230322161444780](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322161444780.png)
![image-20230322161457883](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322161457883.png)
### 3.4编译psqlodbc35w.lib
```shell
cd %WD%
REM Build psqlodbc35w.lib
cd %LIB_ODBC_DIR%
rm -rf libpq
cp -r %LIB_GAUSSDB_DIR%/libpq-win32/libpq-export ./libpq
cp -r %LIB_GAUSSDB_DIR%/libpq-win32/lib/* ./libpq/lib
cp -r %LIB_GAUSSDB_DIR%/libpq-win32/output/libpq.lib ./libpq/lib
rm -rf build
mkdir build
cd build
cmake -DMINGW_DIR="%MINGW_DIR%" -DOPENSSL_DIR="%OPENSSL_DIR%" -D"CMAKE_MAKE_PROGRAM:PATH=%MINGW_DIR%/bin/make.exe" -G "MinGW Makefiles" ..
make
```
**编译结果**
如果遇到下面的问题,这说明还是环境依赖找不到的原因,和编译libpq.lib问题一样的,只需要修改CMakeCache.txt文件对应的环境依赖,参考libpq.lib的修改
![image-20230322161634102](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322161634102.png)
输出正常结果
![image-20230322162117798](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322162117798.png)
![image-20230322162151602](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322162151602.png)
### 3.5制作odbc安装包
```shell
cd %WD%
REM Build psqlodbc.exe
cd psqlodbc-installer
rm -rf win32_dll
mkdir win32_dll
cp %LIB_ODBC_DIR%/output/psqlodbc35w.dll ./win32_dll
cp "%OPENSSL_DIR%"/libssl-1_1.dll ./win32_dll
cp "%OPENSSL_DIR%"/libcrypto-1_1.dll ./win32_dll
makensis odbc-installer.nsi
```
**编译结果**
![image-20230322162318583](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322162318583.png)
### 3.6将odbc打包成tar.gz
```shell
cd %WD%
rm -rf odbc_output
mkdir odbc_output
cp psqlodbc-installer/psqlodbc.exe odbc_output
rm -rf psqlodbc-installer/psqlodbc.exe
cd odbc_output
%p7zip%\7z.exe a -tgzip openGauss-5.0.0-ODBC-windows.tar.gz ./*
rm -rf "%OUTPUT_DIR%"
mkdir "%OUTPUT_DIR%"
cp -r openGauss-5.0.0-ODBC-windows.tar.gz %OUTPUT_DIR%
```
**编译结果**
![image-20230322164651923](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322164651923.png)
![image-20230322164631029](odbc-win32%E7%BC%96%E8%AF%91%E6%8C%87%E5%AF%BC.assets/image-20230322164631029.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

44
windows/odbc-测试.md Normal file
View File

@ -0,0 +1,44 @@
# odbc-测试
## 1、通过客户端odbct32w测试
### 1.1下载软件并安装
| 软件名字 | 地址 |
| ---------- | ------------------------------------------------------------ |
| odbct32w | https://download.microsoft.com/download/9/a/1/9a1256c9-d301-4fdc-93b9-370c5b2f9827/mdac28sdk.msi |
| odbc安装包 | https://opengauss.obs.cn-south-1.myhuaweicloud.com/tools/odbc/openGauss-5.0.0-ODBC-windows.tar.gz |
### 1.2启动opengauss并配置白名单
参考opengauss官网,[odbc相关资料](https://docs.opengauss.org/zh/docs/latest/docs/BriefTutorial/ODBC.html)
### 1.3配置数据源
打开windows自带的数据管理,选择odbc data source 32
![image-20230322211202304](odbc-%E6%B5%8B%E8%AF%95.assets/image-20230322211202304.png)
配置提前启动的opengauss数据库
![image-20230322211421933](odbc-%E6%B5%8B%E8%AF%95.assets/image-20230322211421933.png)
### 1.3通过odbct32w测试工具测试
启动odbct32w,在C:\Program Files (x86)\Microsoft Data Access SDK 2.8\Tools\x86,选择对应的架构类型,打开odbct32w.exe
![image-20230322211526968](odbc-%E6%B5%8B%E8%AF%95.assets/image-20230322211526968.png)
选择配置好的数据源
![image-20230322211744562](odbc-%E6%B5%8B%E8%AF%95.assets/image-20230322211744562.png)
执行简单的sql,分别点击第一个按钮,会显示是否执行成功,第二个按钮,将结果输出
![image-20230322211914017](odbc-%E6%B5%8B%E8%AF%95.assets/image-20230322211914017.png)