Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
51b55730
Commit
51b55730
authored
Mar 25, 2002
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix for ODBC compile warnings.
parent
918feb61
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
54 additions
and
45 deletions
+54
-45
src/interfaces/odbc/bind.c
src/interfaces/odbc/bind.c
+1
-1
src/interfaces/odbc/connection.c
src/interfaces/odbc/connection.c
+1
-2
src/interfaces/odbc/convert.c
src/interfaces/odbc/convert.c
+35
-31
src/interfaces/odbc/dlg_specific.c
src/interfaces/odbc/dlg_specific.c
+3
-3
src/interfaces/odbc/environ.c
src/interfaces/odbc/environ.c
+2
-3
src/interfaces/odbc/info.c
src/interfaces/odbc/info.c
+1
-1
src/interfaces/odbc/multibyte.c
src/interfaces/odbc/multibyte.c
+2
-2
src/interfaces/odbc/multibyte.h
src/interfaces/odbc/multibyte.h
+3
-0
src/interfaces/odbc/pgtypes.c
src/interfaces/odbc/pgtypes.c
+4
-0
src/interfaces/odbc/qresult.c
src/interfaces/odbc/qresult.c
+2
-2
No files found.
src/interfaces/odbc/bind.c
View file @
51b55730
...
...
@@ -340,7 +340,7 @@ PGAPI_ParamOptions(
mylog
(
"%s: entering... %d %x
\n
"
,
func
,
crow
,
pirow
);
stmt
->
options
.
paramset_size
=
crow
;
stmt
->
options
.
param_processed_ptr
=
pirow
;
stmt
->
options
.
param_processed_ptr
=
(
SQLUINTEGER
*
)
pirow
;
return
SQL_SUCCESS
;
}
...
...
src/interfaces/odbc/connection.c
View file @
51b55730
...
...
@@ -1130,8 +1130,7 @@ CC_get_error(ConnectionClass *self, int *number, char **message)
QResultClass
*
CC_send_query
(
ConnectionClass
*
self
,
char
*
query
,
QueryInfo
*
qi
,
UDWORD
flag
)
{
QResultClass
*
result_in
=
NULL
,
*
cmdres
=
NULL
,
QResultClass
*
cmdres
=
NULL
,
*
retres
=
NULL
,
*
res
=
NULL
;
BOOL
clear_result_on_abort
=
((
flag
&
CLEAR_RESULT_ON_ABORT
)
!=
0
),
...
...
src/interfaces/odbc/convert.c
View file @
51b55730
...
...
@@ -107,7 +107,7 @@ char *mapFuncs[][2] = {
{
"DAYNAME"
,
"to_char($1, 'Day')"
},
{
"DAYOFMONTH"
,
"cast(extract(day from $1) as integer)"
},
{
"DAYOFWEEK"
,
"(cast(extract(dow from $1) as integer) + 1)"
},
{
"DAYOFYEAR"
,
"cast(extract(doy from $1) as integer)"
},
{
"DAYOFYEAR"
,
"cast(extract(doy from $1) as integer)"
},
{
"HOUR"
,
"cast(extract(hour from $1) as integer)"
},
{
"MINUTE"
,
"cast(extract(minute from $1) as integer)"
},
{
"MONTH"
,
"cast(extract(month from $1) as integer)"
},
...
...
@@ -161,7 +161,9 @@ timestamp2stime(const char *str, SIMPLE_TIME *st, BOOL *bZone, int *zone)
*
ptr
;
int
scnt
,
i
;
#if defined(WIN32) || defined(HAVE_INT_TIMEZONE)
long
timediff
;
#endif
BOOL
withZone
=
*
bZone
;
*
bZone
=
FALSE
;
...
...
@@ -402,7 +404,7 @@ copy_and_convert_field(StatementClass *stmt, Int4 field_type, void *value, Int2
else
{
stmt
->
errornumber
=
STMT_RETURN_NULL_WITHOUT_INDICATOR
;
stmt
->
errormsg
=
"StrLen_or_IndPtr was a null pointer and NULL data was retrieved"
;
stmt
->
errormsg
=
"StrLen_or_IndPtr was a null pointer and NULL data was retrieved"
;
SC_log_error
(
func
,
""
,
stmt
);
return
SQL_ERROR
;
}
...
...
@@ -757,7 +759,7 @@ copy_and_convert_field(StatementClass *stmt, Int4 field_type, void *value, Int2
if
(
cbValueMax
<
2
*
(
SDWORD
)
ucount
)
result
=
COPY_RESULT_TRUNCATED
;
len
=
ucount
*
2
;
free
(
str
);
free
(
str
);
}
else
{
...
...
@@ -1431,7 +1433,8 @@ copy_statement_with_parameters(StatementClass *stmt)
*/
else
if
(
oldchar
==
'{'
)
{
char
*
begin
=
&
old_statement
[
opos
],
*
end
;
char
*
begin
=
&
old_statement
[
opos
];
const
char
*
end
;
/* procedure calls */
if
(
stmt
->
statement_type
==
STMT_TYPE_PROCCALL
)
...
...
@@ -1463,8 +1466,8 @@ copy_statement_with_parameters(StatementClass *stmt)
proc_no_param
=
FALSE
;
continue
;
}
if
(
convert_escape
(
begin
,
stmt
,
&
npos
,
&
new_stsize
,
&
end
)
!=
CONVERT_ESCAPE_OK
)
if
(
convert_escape
(
begin
,
stmt
,
&
npos
,
&
new_stsize
,
&
end
)
!=
CONVERT_ESCAPE_OK
)
{
stmt
->
errormsg
=
"ODBC escape convert error"
;
stmt
->
errornumber
=
STMT_EXEC_ERROR
;
...
...
@@ -1604,7 +1607,7 @@ copy_statement_with_parameters(StatementClass *stmt)
buffer
+=
(
bind_size
*
current_row
);
else
if
(
ctypelen
=
ctype_length
(
stmt
->
parameters
[
param_number
].
CType
),
ctypelen
>
0
)
buffer
+=
current_row
*
ctypelen
;
else
else
buffer
+=
current_row
*
stmt
->
parameters
[
param_number
].
buflen
;
}
if
(
stmt
->
parameters
[
param_number
].
used
)
...
...
@@ -2080,7 +2083,7 @@ mapFunction(const char *func, int param_count)
if
(
mapFuncs
[
i
][
0
][
0
]
==
'%'
)
{
if
(
mapFuncs
[
i
][
0
][
1
]
-
'0'
==
param_count
&&
!
stricmp
(
mapFuncs
[
i
][
0
]
+
2
,
func
))
!
stricmp
(
mapFuncs
[
i
][
0
]
+
2
,
func
))
return
mapFuncs
[
i
][
1
];
}
else
if
(
!
stricmp
(
mapFuncs
[
i
][
0
],
func
))
...
...
@@ -2098,7 +2101,7 @@ static int processParameters(const ConnectionClass *conn, const char *value, cha
* inner_convert_escape()
* work with embedded escapes sequences
*/
static
int
inner_convert_escape
(
const
ConnectionClass
*
conn
,
const
char
*
value
,
char
*
result
,
UInt4
maxLen
,
const
char
**
input_resume
,
...
...
@@ -2111,7 +2114,7 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
const
char
*
valptr
;
UInt4
vlen
,
prtlen
,
input_consumed
,
param_consumed
,
extra_len
;
Int4
param_pos
[
16
][
2
];
valptr
=
value
;
if
(
*
valptr
==
'{'
)
/* skip the first { */
valptr
++
;
...
...
@@ -2123,7 +2126,7 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
valptr
++
;
while
((
*
valptr
!=
'\0'
)
&&
isspace
((
unsigned
char
)
*
valptr
))
valptr
++
;
if
(
end
=
my_strchr
(
conn
,
valptr
,
'}'
),
NULL
==
end
)
{
mylog
(
"%s couldn't find the ending }
\n
"
,
func
);
...
...
@@ -2135,7 +2138,7 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
valnts
[
vlen
]
=
'\0'
;
*
input_resume
=
valptr
+
vlen
;
/* resume from the last } */
mylog
(
"%s: key='%s', val='%s'
\n
"
,
func
,
key
,
valnts
);
extra_len
=
0
;
if
(
isalnum
(
result
[
-
1
]))
/* Avoid the concatenation of the function name with the previous word. Aceto */
{
...
...
@@ -2172,7 +2175,7 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
{
/* Literal; return the escape part as-is */
strncpy
(
result
,
valnts
,
maxLen
);
prtlen
=
vlen
;
prtlen
=
vlen
;
}
else
if
(
strcmp
(
key
,
"fn"
)
==
0
)
{
...
...
@@ -2183,7 +2186,7 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
char
*
funcEnd
=
valnts
;
char
svchar
;
const
char
*
mapExpr
;
params
[
sizeof
(
params
)
-
1
]
=
'\0'
;
while
((
*
funcEnd
!=
'\0'
)
&&
(
*
funcEnd
!=
'('
)
&&
...
...
@@ -2197,7 +2200,7 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
funcEnd
++
;
/*
* We expect left parenthesis here, else return fn body as-is
* We expect left parenthesis here, else return fn body as-is
* since it is one of those "function constants".
*/
if
(
*
funcEnd
!=
'('
)
...
...
@@ -2213,7 +2216,7 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
*/
valptr
+=
(
UInt4
)(
funcEnd
-
valnts
);
if
(
subret
=
processParameters
(
conn
,
valptr
,
params
,
sizeof
(
params
)
-
1
,
&
input_consumed
,
&
param_consumed
,
param_pos
),
CONVERT_ESCAPE_OK
!=
subret
)
if
(
subret
=
processParameters
(
conn
,
valptr
,
params
,
sizeof
(
params
)
-
1
,
&
input_consumed
,
&
param_consumed
,
param_pos
),
CONVERT_ESCAPE_OK
!=
subret
)
return
CONVERT_ESCAPE_ERROR
;
for
(
param_count
=
0
;;
param_count
++
)
...
...
@@ -2222,9 +2225,9 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
break
;
}
if
(
param_count
==
1
&&
param_pos
[
0
][
1
]
<
param_pos
[
0
][
0
])
param_pos
[
0
][
1
]
<
param_pos
[
0
][
0
])
param_count
=
0
;
mapExpr
=
mapFunction
(
key
,
param_count
);
if
(
mapExpr
==
NULL
)
prtlen
=
snprintf
(
result
,
maxLen
,
"%s%s"
,
key
,
params
);
...
...
@@ -2256,7 +2259,7 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
{
pidx
=
*
mapptr
-
'0'
-
1
;
if
(
pidx
<
0
||
param_pos
[
pidx
][
0
]
<
0
)
param_pos
[
pidx
][
0
]
<
0
)
{
qlog
(
"%s %dth param not found for the expression %s
\n
"
,
pidx
+
1
,
mapExpr
);
return
CONVERT_ESCAPE_ERROR
;
...
...
@@ -2291,7 +2294,7 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
/* Bogus key, leave untranslated */
return
CONVERT_ESCAPE_ERROR
;
}
if
(
count
)
*
count
=
prtlen
+
extra_len
;
if
(
prtlen
<
0
||
prtlen
>=
maxLen
)
/* buffer overflow */
...
...
@@ -2301,12 +2304,12 @@ int inner_convert_escape(const ConnectionClass *conn, const char *value,
}
return
CONVERT_ESCAPE_OK
;
}
/*
* processParameters()
* Process function parameters and work with embedded escapes sequences.
*/
static
int
processParameters
(
const
ConnectionClass
*
conn
,
const
char
*
value
,
char
*
result
,
UInt4
maxLen
,
UInt4
*
input_consumed
,
...
...
@@ -2321,7 +2324,7 @@ int processParameters(const ConnectionClass *conn, const char *value,
#ifdef MULTIBYTE
encoded_str
encstr
;
#endif
/* MULTIBYTE */
buf
[
sizeof
(
buf
)
-
1
]
=
'\0'
;
innerParenthesis
=
0
;
in_quote
=
in_dquote
=
in_escape
=
leadingSpace
=
FALSE
;
...
...
@@ -2400,7 +2403,7 @@ int processParameters(const ConnectionClass *conn, const char *value,
}
innerParenthesis
++
;
break
;
case
')'
:
innerParenthesis
--
;
if
(
0
==
innerParenthesis
)
...
...
@@ -2411,18 +2414,18 @@ int processParameters(const ConnectionClass *conn, const char *value,
param_pos
[
param_count
][
1
]
=
-
1
;
}
break
;
case
'}'
:
stop
=
TRUE
;
break
;
case
'{'
:
if
(
subret
=
inner_convert_escape
(
conn
,
valptr
,
buf
,
sizeof
(
buf
)
-
1
,
&
valptr
,
&
inner_count
),
CONVERT_ESCAPE_OK
!=
subret
)
return
CONVERT_ESCAPE_ERROR
;
if
(
inner_count
+
count
>=
maxLen
)
return
CONVERT_ESCAPE_OVERFLOW
;
memcpy
(
&
result
[
count
],
buf
,
inner_count
);
memcpy
(
&
result
[
count
],
buf
,
inner_count
);
count
+=
inner_count
;
ipos
=
(
UInt4
)
(
valptr
-
value
);
continue
;
...
...
@@ -2442,14 +2445,15 @@ int processParameters(const ConnectionClass *conn, const char *value,
*
output_count
=
count
;
return
CONVERT_ESCAPE_OK
;
}
/*
* convert_escape()
* This function returns a pointer to static memory!
*/
int
convert_escape
(
const
char
*
value
,
StatementClass
*
stmt
,
int
*
npos
,
int
*
stsize
,
const
char
**
val_resume
)
convert_escape
(
const
char
*
value
,
StatementClass
*
stmt
,
int
*
npos
,
int
*
stsize
,
const
char
**
val_resume
)
{
int
ret
,
pos
=
*
npos
;
UInt4
count
;
...
...
src/interfaces/odbc/dlg_specific.c
View file @
51b55730
...
...
@@ -641,7 +641,7 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
flag
|=
BIT_TRUEISMINUS1
;
sprintf
(
&
connect_string
[
hlen
],
";A6=%s;A7=%d;A8=%d;B0=%d;B1=%d;C2=%s;CX=%02x%x"
,
";A6=%s;A7=%d;A8=%d;B0=%d;B1=%d;C2=%s;CX=%02x%
l
x"
,
encoded_conn_settings
,
ci
->
drivers
.
fetch_max
,
ci
->
drivers
.
socket_buffersize
,
...
...
@@ -662,7 +662,7 @@ unfoldCXAttribute(ConnInfo *ci, const char *value)
if
(
strlen
(
value
)
<
2
)
{
count
=
3
;
sscanf
(
value
,
"%x"
,
&
flag
);
sscanf
(
value
,
"%
l
x"
,
&
flag
);
}
else
{
...
...
@@ -670,7 +670,7 @@ unfoldCXAttribute(ConnInfo *ci, const char *value)
memcpy
(
cnt
,
value
,
2
);
cnt
[
2
]
=
'\0'
;
sscanf
(
cnt
,
"%x"
,
&
count
);
sscanf
(
value
+
2
,
"%x"
,
&
flag
);
sscanf
(
value
+
2
,
"%
l
x"
,
&
flag
);
}
ci
->
disallow_premature
=
(
char
)((
flag
&
BIT_DISALLOWPREMATURE
)
!=
0
);
ci
->
updatable_cursors
=
(
char
)((
flag
&
BIT_UPDATABLECURSORS
)
!=
0
);
...
...
src/interfaces/odbc/environ.c
View file @
51b55730
...
...
@@ -94,9 +94,8 @@ PGAPI_StmtError( HSTMT hstmt,
StatementClass
*
stmt
=
(
StatementClass
*
)
hstmt
;
char
*
msg
;
int
status
;
BOOL
once_again
=
FALSE
,
partial_ok
=
(
flag
&
PODBC_ALLOW_PARTIAL_EXTRACT
!=
0
),
clear_str
=
(
flag
&
PODBC_ERROR_CLEAR
!=
0
);
BOOL
partial_ok
=
((
flag
&
PODBC_ALLOW_PARTIAL_EXTRACT
)
!=
0
),
clear_str
=
((
flag
&
PODBC_ERROR_CLEAR
)
!=
0
);
SWORD
msglen
,
stapos
,
wrtlen
,
pcblen
;
mylog
(
"**** PGAPI_StmtError: hstmt=%u <%d>
\n
"
,
hstmt
,
cbErrorMsgMax
);
...
...
src/interfaces/odbc/info.c
View file @
51b55730
...
...
@@ -3983,7 +3983,7 @@ PGAPI_TablePrivileges(
char
*
grolist
,
*
uid
,
*
delm
;
snprintf
(
proc_query
,
sizeof
(
proc_query
)
-
1
,
"select grolist from pg_group where groname = '%s'"
,
user
);
if
(
gres
=
CC_send_query
(
conn
,
proc_query
,
NULL
,
CLEAR_RESULT_ON_ABORT
))
if
(
(
gres
=
CC_send_query
(
conn
,
proc_query
,
NULL
,
CLEAR_RESULT_ON_ABORT
)
))
{
grolist
=
QR_get_value_backend_row
(
gres
,
0
,
0
);
if
(
grolist
&&
grolist
[
0
]
==
'{'
)
...
...
src/interfaces/odbc/multibyte.c
View file @
51b55730
...
...
@@ -228,8 +228,8 @@ pg_CS_stat(int stat,unsigned int character,int characterset_code)
character
>
0xa0
)
stat
=
3
;
else
if
(
stat
==
3
||
stat
<
2
&&
character
>
0xa0
)
(
stat
<
2
&&
character
>
0xa0
)
)
stat
=
2
;
else
if
(
stat
==
2
)
stat
=
1
;
...
...
src/interfaces/odbc/multibyte.h
View file @
51b55730
...
...
@@ -86,4 +86,7 @@ void encoded_str_constr(encoded_str *encstr, int ccsc, const char *str);
#define make_encoded_str(encstr, conn, str) encoded_str_constr(encstr, conn->ccsc, str)
extern
int
encoded_nextchar
(
encoded_str
*
encstr
);
extern
int
encoded_byte_check
(
encoded_str
*
encstr
,
int
abspos
);
/* This doesn't seem to be called by anyone, bjm 2002-03-24 */
extern
int
pg_ismb
(
int
characterset_code
);
#define check_client_encoding(X) pg_CS_name(pg_CS_code(X))
src/interfaces/odbc/pgtypes.c
View file @
51b55730
...
...
@@ -234,7 +234,9 @@ pgtype_to_sqltype(StatementClass *stmt, Int4 type)
{
ConnectionClass
*
conn
=
SC_get_conn
(
stmt
);
ConnInfo
*
ci
=
&
(
conn
->
connInfo
);
#if (ODBCVER >= 0x0300)
EnvironmentClass
*
env
=
(
EnvironmentClass
*
)
(
conn
->
henv
);
#endif
switch
(
type
)
{
...
...
@@ -342,7 +344,9 @@ pgtype_to_ctype(StatementClass *stmt, Int4 type)
{
ConnectionClass
*
conn
=
SC_get_conn
(
stmt
);
ConnInfo
*
ci
=
&
(
conn
->
connInfo
);
#if (ODBCVER >= 0x0300)
EnvironmentClass
*
env
=
(
EnvironmentClass
*
)
(
conn
->
henv
);
#endif
switch
(
type
)
{
...
...
src/interfaces/odbc/qresult.c
View file @
51b55730
...
...
@@ -731,10 +731,10 @@ QR_read_tuple(QResultClass *self, char binary)
if
(
this_keyset
)
{
if
(
this_tuplefield
[
num_fields
-
2
].
value
)
sscanf
(
this_tuplefield
[
num_fields
-
2
].
value
,
"(%u,%hu)"
,
sscanf
(
this_tuplefield
[
num_fields
-
2
].
value
,
"(%
l
u,%hu)"
,
&
this_keyset
->
blocknum
,
&
this_keyset
->
offset
);
if
(
this_tuplefield
[
num_fields
-
1
].
value
)
sscanf
(
this_tuplefield
[
num_fields
-
1
].
value
,
"%u"
,
sscanf
(
this_tuplefield
[
num_fields
-
1
].
value
,
"%
l
u"
,
&
this_keyset
->
oid
);
}
self
->
currTuple
++
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment