Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
7f38b8d6
Kaydet (Commit)
7f38b8d6
authored
Haz 05, 2013
tarafından
Javier Fernandez
Kaydeden (comit)
Andrzej J.R. Hunt
Tem 16, 2013
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Refactoring some code on the FStatement class.
Change-Id: Id172dde2f35538ac37b632f738fe5c2a87437832
üst
1d7ad324
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
155 additions
and
171 deletions
+155
-171
FConnection.cxx
connectivity/source/drivers/firebird/FConnection.cxx
+7
-0
FDatabaseMetaData.hxx
connectivity/source/drivers/firebird/FDatabaseMetaData.hxx
+0
-1
FPreparedStatement.cxx
connectivity/source/drivers/firebird/FPreparedStatement.cxx
+1
-124
FStatement.cxx
connectivity/source/drivers/firebird/FStatement.cxx
+145
-46
FStatement.hxx
connectivity/source/drivers/firebird/FStatement.hxx
+2
-0
No files found.
connectivity/source/drivers/firebird/FConnection.cxx
Dosyayı görüntüle @
7f38b8d6
...
...
@@ -127,6 +127,13 @@ Reference< XStatement > SAL_CALL OConnection::createStatement( ) throw(SQLExcep
::
osl
::
MutexGuard
aGuard
(
m_aMutex
);
checkDisposed
(
OConnection_BASE
::
rBHelper
.
bDisposed
);
// the pre
if
(
m_aTypeInfo
.
empty
())
buildTypeInfo
();
SAL_INFO
(
"connectivity.firebird"
,
"=> OConnection::createStatement(). "
"Creating statement."
);
// create a statement
// the statement can only be executed once
Reference
<
XStatement
>
xReturn
=
new
OStatement
(
this
);
...
...
connectivity/source/drivers/firebird/FDatabaseMetaData.hxx
Dosyayı görüntüle @
7f38b8d6
...
...
@@ -53,7 +53,6 @@ namespace connectivity
class
ODatabaseMetaData
:
public
ODatabaseMetaData_BASE
{
OConnection
*
m_pConnection
;
::
com
::
sun
::
star
::
uno
::
Reference
<
::
com
::
sun
::
star
::
sdbc
::
XPreparedStatement
>
m_pGetTablesStm
;
sal_Bool
m_bUseCatalog
;
public
:
...
...
connectivity/source/drivers/firebird/FPreparedStatement.cxx
Dosyayı görüntüle @
7f38b8d6
...
...
@@ -87,130 +87,7 @@ OPreparedStatement::OPreparedStatement( OConnection* _pConnection,const TTypeInf
SAL_INFO
(
"connectivity.firebird"
,
"=> OPreparedStatement::OPreparedStatement_BASE(). "
"sql: "
<<
sql
);
ISC_STATUS_ARRAY
status
;
// status vector
isc_db_handle
db
=
_pConnection
->
getDBHandler
();
// database handle
// enabling the XSQLDA to accommodate up to 10 select-list items (DEFAULT)
m_OUTsqlda
=
(
XSQLDA
*
)
malloc
(
XSQLDA_LENGTH
(
10
));
m_OUTsqlda
->
version
=
SQLDA_VERSION1
;
m_OUTsqlda
->
sqln
=
10
;
// enabling the XSQLDA to accommodate up to 10 parameter items (DEFAULT)
m_INsqlda
=
(
XSQLDA
*
)
malloc
(
XSQLDA_LENGTH
(
10
));
m_INsqlda
->
version
=
SQLDA_VERSION1
;
m_INsqlda
->
sqln
=
10
;
m_STMTHandler
=
NULL
;
// Set handle to NULL before allocation.
if
(
isc_dsql_allocate_statement
(
status
,
&
db
,
&
m_STMTHandler
))
if
(
pr_error
(
status
,
"allocate statement"
))
return
;
m_TRANSHandler
=
0L
;
// transaction handle
if
(
isc_start_transaction
(
status
,
&
m_TRANSHandler
,
1
,
&
db
,
0
,
NULL
))
if
(
pr_error
(
status
,
"start transaction"
))
return
;
// sets the statement handle (stmt) to refer to the parsed format.
char
*
sqlStr
=
strdup
(
OUStringToOString
(
m_sSqlStatement
,
RTL_TEXTENCODING_UTF8
).
getStr
());
if
(
isc_dsql_prepare
(
status
,
&
m_TRANSHandler
,
&
m_STMTHandler
,
0
,
sqlStr
,
1
,
m_OUTsqlda
))
if
(
pr_error
(
status
,
"prepare statement"
))
return
;
free
(
sqlStr
);
// fill the input XSQLDA with information about the parameters
if
(
isc_dsql_describe_bind
(
status
,
&
m_STMTHandler
,
1
,
m_INsqlda
))
if
(
pr_error
(
status
,
"bind statement"
))
return
;
XSQLVAR
*
var
=
NULL
;
int
i
,
dtype
;
// determine if the input descriptor can accommodate the number of parameters
// contained in the statement.
if
(
0
==
m_INsqlda
->
sqld
)
{
free
(
m_INsqlda
);
m_INsqlda
=
NULL
;
}
else
{
if
(
m_INsqlda
->
sqld
>
m_INsqlda
->
sqln
)
{
int
n
=
m_INsqlda
->
sqld
;
free
(
m_INsqlda
);
m_INsqlda
=
(
XSQLDA
*
)
malloc
(
XSQLDA_LENGTH
(
n
));
m_INsqlda
->
sqln
=
n
;
m_INsqlda
->
version
=
SQLDA_VERSION1
;
if
(
isc_dsql_describe_bind
(
status
,
&
m_STMTHandler
,
1
,
m_INsqlda
))
if
(
pr_error
(
status
,
"bind statement 2"
))
return
;
}
}
// fill the output XSQLDA with information about the select-list items.
if
(
isc_dsql_describe
(
status
,
&
m_STMTHandler
,
1
,
m_OUTsqlda
))
if
(
pr_error
(
status
,
"describe statement"
))
return
;
// determine if the output descriptor can accommodate the number of select-list
// items specified in the statement.
if
(
m_OUTsqlda
->
sqld
>
m_OUTsqlda
->
sqln
)
{
int
n
=
m_OUTsqlda
->
sqld
;
free
(
m_OUTsqlda
);
m_OUTsqlda
=
(
XSQLDA
*
)
malloc
(
XSQLDA_LENGTH
(
n
));
m_OUTsqlda
->
sqln
=
n
;
m_OUTsqlda
->
version
=
SQLDA_VERSION1
;
if
(
isc_dsql_describe
(
status
,
&
m_STMTHandler
,
1
,
m_OUTsqlda
))
if
(
pr_error
(
status
,
"describe statement 2"
))
return
;
}
// Process each XSQLVAR parameter structure in the output XSQLDA
for
(
i
=
0
,
var
=
m_OUTsqlda
->
sqlvar
;
i
<
m_OUTsqlda
->
sqld
;
i
++
,
var
++
)
{
dtype
=
(
var
->
sqltype
&
~
1
);
/* drop flag bit for now */
switch
(
dtype
)
{
case
SQL_VARYING
:
var
->
sqltype
=
SQL_TEXT
;
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
char
)
*
var
->
sqllen
+
2
);
break
;
case
SQL_TEXT
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
char
)
*
var
->
sqllen
);
break
;
case
SQL_LONG
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
long
));
break
;
case
SQL_SHORT
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
char
)
*
var
->
sqllen
);
break
;
case
SQL_FLOAT
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
double
));
break
;
case
SQL_DOUBLE
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
double
));
break
;
case
SQL_D_FLOAT
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
double
));
break
;
case
SQL_TIMESTAMP
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
time_t
));
break
;
case
SQL_INT64
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
int
));
break
;
/* process remaining types */
default
:
OSL_ASSERT
(
false
);
break
;
}
if
(
var
->
sqltype
&
1
)
{
/* allocate variable to hold NULL status */
var
->
sqlind
=
(
short
*
)
malloc
(
sizeof
(
short
));
}
}
prepareQuery
(
m_sSqlStatement
);
}
// -----------------------------------------------------------------------------
...
...
connectivity/source/drivers/firebird/FStatement.cxx
Dosyayı görüntüle @
7f38b8d6
...
...
@@ -86,8 +86,24 @@ OStatement_Base::OStatement_Base(OConnection* _pConnection )
m_pConnection
(
_pConnection
)
{
m_pConnection
->
acquire
();
m_OUTsqlda
=
NULL
;
m_INsqlda
=
NULL
;
ISC_STATUS_ARRAY
status
;
// status vector
isc_db_handle
db
=
m_pConnection
->
getDBHandler
();
// database handle
// enabling the XSQLDA to accommodate up to 10 select-list items (DEFAULT)
m_OUTsqlda
=
(
XSQLDA
*
)
malloc
(
XSQLDA_LENGTH
(
10
));
m_OUTsqlda
->
version
=
SQLDA_VERSION1
;
m_OUTsqlda
->
sqln
=
10
;
// enabling the XSQLDA to accommodate up to 10 parameter items (DEFAULT)
m_INsqlda
=
(
XSQLDA
*
)
malloc
(
XSQLDA_LENGTH
(
10
));
m_INsqlda
->
version
=
SQLDA_VERSION1
;
m_INsqlda
->
sqln
=
10
;
m_STMTHandler
=
NULL
;
// Set handle to NULL before allocation.
if
(
isc_dsql_allocate_statement
(
status
,
&
db
,
&
m_STMTHandler
))
if
(
pr_error
(
status
,
"allocate statement"
))
return
;
}
//-----------------------------------------------------------------------------
OStatement_Base
::~
OStatement_Base
()
...
...
@@ -195,6 +211,119 @@ sal_Bool SAL_CALL OStatement_Base::execute( const ::rtl::OUString& sql ) throw(S
// returns true when a resultset is available
return
sal_False
;
}
void
SAL_CALL
OStatement_Base
::
prepareQuery
(
const
::
rtl
::
OUString
&
sql
)
throw
(
SQLException
,
RuntimeException
)
{
ISC_STATUS_ARRAY
status
;
// status vector
isc_db_handle
db
=
m_pConnection
->
getDBHandler
();
// database handle
m_TRANSHandler
=
0L
;
// transaction handle
if
(
isc_start_transaction
(
status
,
&
m_TRANSHandler
,
1
,
&
db
,
0
,
NULL
))
if
(
pr_error
(
status
,
"start transaction"
))
return
;
// sets the statement handle (stmt) to refer to the parsed format.
char
*
sqlStr
=
strdup
(
OUStringToOString
(
sql
,
RTL_TEXTENCODING_UTF8
).
getStr
());
if
(
isc_dsql_prepare
(
status
,
&
m_TRANSHandler
,
&
m_STMTHandler
,
0
,
sqlStr
,
1
,
m_OUTsqlda
))
if
(
pr_error
(
status
,
"prepare statement"
))
return
;
free
(
sqlStr
);
// fill the input XSQLDA with information about the parameters
if
(
isc_dsql_describe_bind
(
status
,
&
m_STMTHandler
,
1
,
m_INsqlda
))
if
(
pr_error
(
status
,
"bind statement"
))
return
;
XSQLVAR
*
var
=
NULL
;
int
i
,
dtype
;
// determine if the input descriptor can accommodate the number of parameters
// contained in the statement.
if
(
0
==
m_INsqlda
->
sqld
)
{
free
(
m_INsqlda
);
m_INsqlda
=
NULL
;
}
else
{
if
(
m_INsqlda
->
sqld
>
m_INsqlda
->
sqln
)
{
int
n
=
m_INsqlda
->
sqld
;
free
(
m_INsqlda
);
m_INsqlda
=
(
XSQLDA
*
)
malloc
(
XSQLDA_LENGTH
(
n
));
m_INsqlda
->
sqln
=
n
;
m_INsqlda
->
version
=
SQLDA_VERSION1
;
if
(
isc_dsql_describe_bind
(
status
,
&
m_STMTHandler
,
1
,
m_INsqlda
))
if
(
pr_error
(
status
,
"bind statement 2"
))
return
;
}
}
// fill the output XSQLDA with information about the select-list items.
if
(
isc_dsql_describe
(
status
,
&
m_STMTHandler
,
1
,
m_OUTsqlda
))
if
(
pr_error
(
status
,
"describe statement"
))
return
;
// determine if the output descriptor can accommodate the number of select-list
// items specified in the statement.
if
(
m_OUTsqlda
->
sqld
>
m_OUTsqlda
->
sqln
)
{
int
n
=
m_OUTsqlda
->
sqld
;
free
(
m_OUTsqlda
);
m_OUTsqlda
=
(
XSQLDA
*
)
malloc
(
XSQLDA_LENGTH
(
n
));
m_OUTsqlda
->
sqln
=
n
;
m_OUTsqlda
->
version
=
SQLDA_VERSION1
;
if
(
isc_dsql_describe
(
status
,
&
m_STMTHandler
,
1
,
m_OUTsqlda
))
if
(
pr_error
(
status
,
"describe statement 2"
))
return
;
}
// Process each XSQLVAR parameter structure in the output XSQLDA
for
(
i
=
0
,
var
=
m_OUTsqlda
->
sqlvar
;
i
<
m_OUTsqlda
->
sqld
;
i
++
,
var
++
)
{
dtype
=
(
var
->
sqltype
&
~
1
);
/* drop flag bit for now */
switch
(
dtype
)
{
case
SQL_VARYING
:
var
->
sqltype
=
SQL_TEXT
;
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
char
)
*
var
->
sqllen
+
2
);
break
;
case
SQL_TEXT
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
char
)
*
var
->
sqllen
);
break
;
case
SQL_LONG
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
long
));
break
;
case
SQL_SHORT
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
char
)
*
var
->
sqllen
);
break
;
case
SQL_FLOAT
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
double
));
break
;
case
SQL_DOUBLE
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
double
));
break
;
case
SQL_D_FLOAT
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
double
));
break
;
case
SQL_TIMESTAMP
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
time_t
));
break
;
case
SQL_INT64
:
var
->
sqldata
=
(
char
*
)
malloc
(
sizeof
(
int
));
break
;
/* process remaining types */
default
:
OSL_ASSERT
(
false
);
break
;
}
if
(
var
->
sqltype
&
1
)
{
/* allocate variable to hold NULL status */
var
->
sqlind
=
(
short
*
)
malloc
(
sizeof
(
short
));
}
}
}
// -------------------------------------------------------------------------
Reference
<
XResultSet
>
SAL_CALL
OStatement_Base
::
executeQuery
(
const
::
rtl
::
OUString
&
sql
)
throw
(
SQLException
,
RuntimeException
)
...
...
@@ -202,60 +331,30 @@ Reference< XResultSet > SAL_CALL OStatement_Base::executeQuery( const ::rtl::OUS
SAL_INFO
(
"connectivity.firebird"
,
"=> OStatement_Base::executeQuery(). "
"Got called with sql: "
<<
sql
);
char
sqlStr
[
128
];
strcpy
(
sqlStr
,
OUStringToOString
(
sql
,
RTL_TEXTENCODING_ASCII_US
).
getStr
());
::
osl
::
MutexGuard
aGuard
(
m_aMutex
);
checkDisposed
(
OStatement_BASE
::
rBHelper
.
bDisposed
);
Reference
<
XResultSet
>
xRS
=
NULL
;
// create a resultset as result of executing the sql statement
// you have to here something :-)
ISC_STATUS_ARRAY
status
;
// status vector
ISC_STATUS_ARRAY
status
;
/* status vector */
isc_db_handle
db
=
NULL
;
/* database handle */
isc_tr_handle
trans
=
NULL
;
/* transaction handle */
isc_stmt_handle
stmt
=
NULL
;
/* prepared statement handle */
XSQLDA
*
sel_sqlda
;
int
CURRENLEN
=
10
;
char
orig_name
[
CURRENLEN
+
1
];
prepareQuery
(
sql
);
if
(
isc_
attach_database
(
status
,
0
,
"new.fdb"
,
&
db
,
0
,
NULL
))
if
(
pr_error
(
status
,
"
attach database
"
))
return
xRS
;
if
(
isc_
dsql_execute
(
status
,
&
m_TRANSHandler
,
&
m_STMTHandler
,
1
,
m_INsqlda
))
if
(
pr_error
(
status
,
"
execute query
"
))
return
NULL
;
if
(
isc_start_transaction
(
status
,
&
trans
,
1
,
&
db
,
0
,
NULL
))
if
(
pr_error
(
status
,
"start transaction"
))
return
xRS
;
Reference
<
OResultSet
>
pResult
(
new
OResultSet
(
this
)
);
//initializeResultSet( pResult.get() );
Reference
<
XResultSet
>
xRS
=
pResult
.
get
()
;
sel_sqlda
=
(
XSQLDA
*
)
malloc
(
XSQLDA_LENGTH
(
1
));
sel_sqlda
->
sqln
=
1
;
sel_sqlda
->
version
=
1
;
if
(
isc_commit_transaction
(
status
,
&
m_TRANSHandler
))
if
(
pr_error
(
status
,
"commit transaction"
))
return
NULL
;
if
(
isc_dsql_allocate_statement
(
status
,
&
db
,
&
stmt
))
if
(
pr_error
(
status
,
"allocate statement"
))
return
xRS
;
if
(
isc_dsql_prepare
(
status
,
&
trans
,
&
stmt
,
0
,
sqlStr
,
1
,
sel_sqlda
))
if
(
pr_error
(
status
,
"prepare statement"
))
return
xRS
;
SAL_INFO
(
"connectivity.firebird"
,
"=> OStatement::executeQuery(). "
"Query executed."
);
sel_sqlda
->
sqlvar
[
0
].
sqldata
=
orig_name
;
sel_sqlda
->
sqlvar
[
0
].
sqltype
=
SQL_TEXT
;
sel_sqlda
->
sqlvar
[
0
].
sqllen
=
CURRENLEN
;
if
(
isc_dsql_execute
(
status
,
&
trans
,
&
stmt
,
1
,
NULL
))
if
(
pr_error
(
status
,
"execute query"
))
return
xRS
;
if
(
isc_dsql_fetch
(
status
,
&
stmt
,
1
,
sel_sqlda
))
if
(
pr_error
(
status
,
"fetch data"
))
return
xRS
;
if
(
isc_commit_transaction
(
status
,
&
trans
))
isc_print_status
(
status
);
SAL_INFO
(
"connectivity.firebird"
,
"=> OStatement_Base::executeQuery(). "
"Changes committed."
);
close
();
m_xResultSet
=
xRS
;
// we nedd a reference to it for later use
return
xRS
;
}
...
...
connectivity/source/drivers/firebird/FStatement.hxx
Dosyayı görüntüle @
7f38b8d6
...
...
@@ -102,6 +102,8 @@ namespace connectivity
virtual
void
SAL_CALL
getFastPropertyValue
(
::
com
::
sun
::
star
::
uno
::
Any
&
rValue
,
sal_Int32
nHandle
)
const
;
virtual
void
SAL_CALL
prepareQuery
(
const
::
rtl
::
OUString
&
sql
)
throw
(
::
com
::
sun
::
star
::
sdbc
::
SQLException
,
::
com
::
sun
::
star
::
uno
::
RuntimeException
);
virtual
~
OStatement_Base
();
public
:
...
...
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