aboutsummaryrefslogtreecommitdiff
path: root/src/dutil/sqlutil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dutil/sqlutil.cpp')
-rw-r--r--src/dutil/sqlutil.cpp119
1 files changed, 67 insertions, 52 deletions
diff --git a/src/dutil/sqlutil.cpp b/src/dutil/sqlutil.cpp
index 099c6ae9..63ee80ac 100644
--- a/src/dutil/sqlutil.cpp
+++ b/src/dutil/sqlutil.cpp
@@ -9,6 +9,21 @@
9#define DBINITCONSTANTS 9#define DBINITCONSTANTS
10#include "sqlutil.h" 10#include "sqlutil.h"
11 11
12
13// Exit macros
14#define SqlExitOnLastError(x, s, ...) ExitOnLastErrorSource(DUTIL_SOURCE_SQLUTIL, x, s, __VA_ARGS__)
15#define SqlExitOnLastErrorDebugTrace(x, s, ...) ExitOnLastErrorDebugTraceSource(DUTIL_SOURCE_SQLUTIL, x, s, __VA_ARGS__)
16#define SqlExitWithLastError(x, s, ...) ExitWithLastErrorSource(DUTIL_SOURCE_SQLUTIL, x, s, __VA_ARGS__)
17#define SqlExitOnFailure(x, s, ...) ExitOnFailureSource(DUTIL_SOURCE_SQLUTIL, x, s, __VA_ARGS__)
18#define SqlExitOnRootFailure(x, s, ...) ExitOnRootFailureSource(DUTIL_SOURCE_SQLUTIL, x, s, __VA_ARGS__)
19#define SqlExitOnFailureDebugTrace(x, s, ...) ExitOnFailureDebugTraceSource(DUTIL_SOURCE_SQLUTIL, x, s, __VA_ARGS__)
20#define SqlExitOnNull(p, x, e, s, ...) ExitOnNullSource(DUTIL_SOURCE_SQLUTIL, p, x, e, s, __VA_ARGS__)
21#define SqlExitOnNullWithLastError(p, x, s, ...) ExitOnNullWithLastErrorSource(DUTIL_SOURCE_SQLUTIL, p, x, s, __VA_ARGS__)
22#define SqlExitOnNullDebugTrace(p, x, e, s, ...) ExitOnNullDebugTraceSource(DUTIL_SOURCE_SQLUTIL, p, x, e, s, __VA_ARGS__)
23#define SqlExitOnInvalidHandleWithLastError(p, x, s, ...) ExitOnInvalidHandleWithLastErrorSource(DUTIL_SOURCE_SQLUTIL, p, x, s, __VA_ARGS__)
24#define SqlExitOnWin32Error(e, x, s, ...) ExitOnWin32ErrorSource(DUTIL_SOURCE_SQLUTIL, e, x, s, __VA_ARGS__)
25#define SqlExitOnGdipFailure(g, x, s, ...) ExitOnGdipFailureSource(DUTIL_SOURCE_SQLUTIL, g, x, s, __VA_ARGS__)
26
12// private prototypes 27// private prototypes
13static HRESULT FileSpecToString( 28static HRESULT FileSpecToString(
14 __in const SQL_FILESPEC* psf, 29 __in const SQL_FILESPEC* psf,
@@ -54,7 +69,7 @@ extern "C" HRESULT DAPI SqlConnectDatabase(
54 //obtain access to the SQLOLEDB provider 69 //obtain access to the SQLOLEDB provider
55 hr = ::CoCreateInstance(CLSID_SQLOLEDB, NULL, CLSCTX_INPROC_SERVER, 70 hr = ::CoCreateInstance(CLSID_SQLOLEDB, NULL, CLSCTX_INPROC_SERVER,
56 IID_IDBInitialize, (LPVOID*)&pidbInitialize); 71 IID_IDBInitialize, (LPVOID*)&pidbInitialize);
57 ExitOnFailure(hr, "failed to create IID_IDBInitialize object"); 72 SqlExitOnFailure(hr, "failed to create IID_IDBInitialize object");
58 73
59 // if there is an instance 74 // if there is an instance
60 if (wzInstance && *wzInstance) 75 if (wzInstance && *wzInstance)
@@ -65,7 +80,7 @@ extern "C" HRESULT DAPI SqlConnectDatabase(
65 { 80 {
66 hr = StrAllocString(&pwzServerInstance, wzServer, 0); 81 hr = StrAllocString(&pwzServerInstance, wzServer, 0);
67 } 82 }
68 ExitOnFailure(hr, "failed to allocate memory for the server instance"); 83 SqlExitOnFailure(hr, "failed to allocate memory for the server instance");
69 84
70 // server[\instance] 85 // server[\instance]
71 rgdbpInit[cProperties].dwPropertyID = DBPROP_INIT_DATASOURCE; 86 rgdbpInit[cProperties].dwPropertyID = DBPROP_INIT_DATASOURCE;
@@ -124,13 +139,13 @@ extern "C" HRESULT DAPI SqlConnectDatabase(
124 139
125 // create and set the property set 140 // create and set the property set
126 hr = pidbInitialize->QueryInterface(IID_IDBProperties, (LPVOID*)&pidbProperties); 141 hr = pidbInitialize->QueryInterface(IID_IDBProperties, (LPVOID*)&pidbProperties);
127 ExitOnFailure(hr, "failed to get IID_IDBProperties object"); 142 SqlExitOnFailure(hr, "failed to get IID_IDBProperties object");
128 hr = pidbProperties->SetProperties(1, rgdbpsetInit); 143 hr = pidbProperties->SetProperties(1, rgdbpsetInit);
129 ExitOnFailure(hr, "failed to set properties"); 144 SqlExitOnFailure(hr, "failed to set properties");
130 145
131 //initialize connection to datasource 146 //initialize connection to datasource
132 hr = pidbInitialize->Initialize(); 147 hr = pidbInitialize->Initialize();
133 ExitOnFailure(hr, "failed to initialize connection to database: %ls", wzDatabase); 148 SqlExitOnFailure(hr, "failed to initialize connection to database: %ls", wzDatabase);
134 149
135 hr = pidbInitialize->QueryInterface(IID_IDBCreateSession, (LPVOID*)ppidbSession); 150 hr = pidbInitialize->QueryInterface(IID_IDBCreateSession, (LPVOID*)ppidbSession);
136 151
@@ -163,10 +178,10 @@ extern "C" HRESULT DAPI SqlStartTransaction(
163 HRESULT hr = S_OK; 178 HRESULT hr = S_OK;
164 179
165 hr = pidbSession->CreateSession(NULL, IID_IDBCreateCommand, (IUnknown**)ppidbCommand); 180 hr = pidbSession->CreateSession(NULL, IID_IDBCreateCommand, (IUnknown**)ppidbCommand);
166 ExitOnFailure(hr, "unable to create command from session"); 181 SqlExitOnFailure(hr, "unable to create command from session");
167 182
168 hr = (*ppidbCommand)->QueryInterface(IID_ITransactionLocal, (LPVOID*)ppit); 183 hr = (*ppidbCommand)->QueryInterface(IID_ITransactionLocal, (LPVOID*)ppit);
169 ExitOnFailure(hr, "Unable to QueryInterface session to get ITransactionLocal"); 184 SqlExitOnFailure(hr, "Unable to QueryInterface session to get ITransactionLocal");
170 185
171 hr = ((ITransactionLocal*)*ppit)->StartTransaction(ISOLATIONLEVEL_SERIALIZABLE, 0, NULL, NULL); 186 hr = ((ITransactionLocal*)*ppit)->StartTransaction(ISOLATIONLEVEL_SERIALIZABLE, 0, NULL, NULL);
172 187
@@ -192,12 +207,12 @@ extern "C" HRESULT DAPI SqlEndTransaction(
192 if (fCommit) 207 if (fCommit)
193 { 208 {
194 hr = pit->Commit(FALSE, XACTTC_SYNC, 0); 209 hr = pit->Commit(FALSE, XACTTC_SYNC, 0);
195 ExitOnFailure(hr, "commit of transaction failed"); 210 SqlExitOnFailure(hr, "commit of transaction failed");
196 } 211 }
197 else 212 else
198 { 213 {
199 hr = pit->Abort(NULL, FALSE, FALSE); 214 hr = pit->Abort(NULL, FALSE, FALSE);
200 ExitOnFailure(hr, "abort of transaction failed"); 215 SqlExitOnFailure(hr, "abort of transaction failed");
201 } 216 }
202 217
203LExit: 218LExit:
@@ -231,7 +246,7 @@ extern "C" HRESULT DAPI SqlDatabaseExists(
231 IDBCreateSession* pidbSession = NULL; 246 IDBCreateSession* pidbSession = NULL;
232 247
233 hr = SqlConnectDatabase(wzServer, wzInstance, L"master", fIntegratedAuth, wzUser, wzPassword, &pidbSession); 248 hr = SqlConnectDatabase(wzServer, wzInstance, L"master", fIntegratedAuth, wzUser, wzPassword, &pidbSession);
234 ExitOnFailure(hr, "failed to connect to 'master' database on server %ls", wzServer); 249 SqlExitOnFailure(hr, "failed to connect to 'master' database on server %ls", wzServer);
235 250
236 hr = SqlSessionDatabaseExists(pidbSession, wzDatabase, pbstrErrorDescription); 251 hr = SqlSessionDatabaseExists(pidbSession, wzDatabase, pbstrErrorDescription);
237 252
@@ -271,17 +286,17 @@ extern "C" HRESULT DAPI SqlSessionDatabaseExists(
271 // query to see if the database exists 286 // query to see if the database exists
272 // 287 //
273 hr = StrAllocFormatted(&pwzQuery, L"SELECT name FROM sysdatabases WHERE name='%s'", wzDatabase); 288 hr = StrAllocFormatted(&pwzQuery, L"SELECT name FROM sysdatabases WHERE name='%s'", wzDatabase);
274 ExitOnFailure(hr, "failed to allocate query string to ensure database exists"); 289 SqlExitOnFailure(hr, "failed to allocate query string to ensure database exists");
275 290
276 hr = SqlSessionExecuteQuery(pidbSession, pwzQuery, &pirs, NULL, pbstrErrorDescription); 291 hr = SqlSessionExecuteQuery(pidbSession, pwzQuery, &pirs, NULL, pbstrErrorDescription);
277 ExitOnFailure(hr, "failed to get database list from 'master' database"); 292 SqlExitOnFailure(hr, "failed to get database list from 'master' database");
278 Assert(pirs); 293 Assert(pirs);
279 294
280 // 295 //
281 // check to see if the database was returned 296 // check to see if the database was returned
282 // 297 //
283 hr = pirs->GetNextRows(DB_NULL_HCHAPTER, 0, 1, &cRows, &prow); 298 hr = pirs->GetNextRows(DB_NULL_HCHAPTER, 0, 1, &cRows, &prow);
284 ExitOnFailure(hr, "failed to get row with database name"); 299 SqlExitOnFailure(hr, "failed to get row with database name");
285 300
286 // succeeded but no database 301 // succeeded but no database
287 if ((DB_S_ENDOFROWSET == hr) || (0 == cRows)) 302 if ((DB_S_ENDOFROWSET == hr) || (0 == cRows))
@@ -324,10 +339,10 @@ extern "C" HRESULT DAPI SqlDatabaseEnsureExists(
324 // connect to the master database to create the new database 339 // connect to the master database to create the new database
325 // 340 //
326 hr = SqlConnectDatabase(wzServer, wzInstance, L"master", fIntegratedAuth, wzUser, wzPassword, &pidbSession); 341 hr = SqlConnectDatabase(wzServer, wzInstance, L"master", fIntegratedAuth, wzUser, wzPassword, &pidbSession);
327 ExitOnFailure(hr, "failed to connect to 'master' database on server %ls", wzServer); 342 SqlExitOnFailure(hr, "failed to connect to 'master' database on server %ls", wzServer);
328 343
329 hr = SqlSessionDatabaseEnsureExists(pidbSession, wzDatabase, psfDatabase, psfLog, pbstrErrorDescription); 344 hr = SqlSessionDatabaseEnsureExists(pidbSession, wzDatabase, psfDatabase, psfLog, pbstrErrorDescription);
330 ExitOnFailure(hr, "failed to create database: %ls", wzDatabase); 345 SqlExitOnFailure(hr, "failed to create database: %ls", wzDatabase);
331 346
332 Assert(S_OK == hr); 347 Assert(S_OK == hr);
333LExit: 348LExit:
@@ -355,12 +370,12 @@ extern "C" HRESULT DAPI SqlSessionDatabaseEnsureExists(
355 HRESULT hr = S_OK; 370 HRESULT hr = S_OK;
356 371
357 hr = SqlSessionDatabaseExists(pidbSession, wzDatabase, pbstrErrorDescription); 372 hr = SqlSessionDatabaseExists(pidbSession, wzDatabase, pbstrErrorDescription);
358 ExitOnFailure(hr, "failed to determine if exists, database: %ls", wzDatabase); 373 SqlExitOnFailure(hr, "failed to determine if exists, database: %ls", wzDatabase);
359 374
360 if (S_FALSE == hr) 375 if (S_FALSE == hr)
361 { 376 {
362 hr = SqlSessionCreateDatabase(pidbSession, wzDatabase, psfDatabase, psfLog, pbstrErrorDescription); 377 hr = SqlSessionCreateDatabase(pidbSession, wzDatabase, psfDatabase, psfLog, pbstrErrorDescription);
363 ExitOnFailure(hr, "failed to create database: %1", wzDatabase); 378 SqlExitOnFailure(hr, "failed to create database: %ls", wzDatabase);
364 } 379 }
365 // else database already exists, return S_FALSE 380 // else database already exists, return S_FALSE
366 381
@@ -398,10 +413,10 @@ extern "C" HRESULT DAPI SqlCreateDatabase(
398 // connect to the master database to create the new database 413 // connect to the master database to create the new database
399 // 414 //
400 hr = SqlConnectDatabase(wzServer, wzInstance, L"master", fIntegratedAuth, wzUser, wzPassword, &pidbSession); 415 hr = SqlConnectDatabase(wzServer, wzInstance, L"master", fIntegratedAuth, wzUser, wzPassword, &pidbSession);
401 ExitOnFailure(hr, "failed to connect to 'master' database on server %ls", wzServer); 416 SqlExitOnFailure(hr, "failed to connect to 'master' database on server %ls", wzServer);
402 417
403 hr = SqlSessionCreateDatabase(pidbSession, wzDatabase, psfDatabase, psfLog, pbstrErrorDescription); 418 hr = SqlSessionCreateDatabase(pidbSession, wzDatabase, psfDatabase, psfLog, pbstrErrorDescription);
404 ExitOnFailure(hr, "failed to create database: %ls", wzDatabase); 419 SqlExitOnFailure(hr, "failed to create database: %ls", wzDatabase);
405 420
406 Assert(S_OK == hr); 421 Assert(S_OK == hr);
407LExit: 422LExit:
@@ -433,23 +448,23 @@ extern "C" HRESULT DAPI SqlSessionCreateDatabase(
433 if (psfDatabase) 448 if (psfDatabase)
434 { 449 {
435 hr = FileSpecToString(psfDatabase, &pwzDbFile); 450 hr = FileSpecToString(psfDatabase, &pwzDbFile);
436 ExitOnFailure(hr, "failed to convert db filespec to string"); 451 SqlExitOnFailure(hr, "failed to convert db filespec to string");
437 } 452 }
438 453
439 if (psfLog) 454 if (psfLog)
440 { 455 {
441 hr = FileSpecToString(psfLog, &pwzLogFile); 456 hr = FileSpecToString(psfLog, &pwzLogFile);
442 ExitOnFailure(hr, "failed to convert log filespec to string"); 457 SqlExitOnFailure(hr, "failed to convert log filespec to string");
443 } 458 }
444 459
445 hr = EscapeSqlIdentifier(wzDatabase, &pwzDatabaseEscaped); 460 hr = EscapeSqlIdentifier(wzDatabase, &pwzDatabaseEscaped);
446 ExitOnFailure(hr, "failed to escape database string"); 461 SqlExitOnFailure(hr, "failed to escape database string");
447 462
448 hr = StrAllocFormatted(&pwzQuery, L"CREATE DATABASE %s %s%s %s%s", pwzDatabaseEscaped, pwzDbFile ? L"ON " : L"", pwzDbFile ? pwzDbFile : L"", pwzLogFile ? L"LOG ON " : L"", pwzLogFile ? pwzLogFile : L""); 463 hr = StrAllocFormatted(&pwzQuery, L"CREATE DATABASE %s %s%s %s%s", pwzDatabaseEscaped, pwzDbFile ? L"ON " : L"", pwzDbFile ? pwzDbFile : L"", pwzLogFile ? L"LOG ON " : L"", pwzLogFile ? pwzLogFile : L"");
449 ExitOnFailure(hr, "failed to allocate query to create database: %ls", pwzDatabaseEscaped); 464 SqlExitOnFailure(hr, "failed to allocate query to create database: %ls", pwzDatabaseEscaped);
450 465
451 hr = SqlSessionExecuteQuery(pidbSession, pwzQuery, NULL, NULL, pbstrErrorDescription); 466 hr = SqlSessionExecuteQuery(pidbSession, pwzQuery, NULL, NULL, pbstrErrorDescription);
452 ExitOnFailure(hr, "failed to create database: %ls, Query: %ls", pwzDatabaseEscaped, pwzQuery); 467 SqlExitOnFailure(hr, "failed to create database: %ls, Query: %ls", pwzDatabaseEscaped, pwzQuery);
453 468
454LExit: 469LExit:
455 ReleaseStr(pwzQuery); 470 ReleaseStr(pwzQuery);
@@ -486,7 +501,7 @@ extern "C" HRESULT DAPI SqlDropDatabase(
486 // connect to the master database to search for wzDatabase 501 // connect to the master database to search for wzDatabase
487 // 502 //
488 hr = SqlConnectDatabase(wzServer, wzInstance, L"master", fIntegratedAuth, wzUser, wzPassword, &pidbSession); 503 hr = SqlConnectDatabase(wzServer, wzInstance, L"master", fIntegratedAuth, wzUser, wzPassword, &pidbSession);
489 ExitOnFailure(hr, "Failed to connect to 'master' database"); 504 SqlExitOnFailure(hr, "Failed to connect to 'master' database");
490 505
491 hr = SqlSessionDropDatabase(pidbSession, wzDatabase, pbstrErrorDescription); 506 hr = SqlSessionDropDatabase(pidbSession, wzDatabase, pbstrErrorDescription);
492 507
@@ -515,18 +530,18 @@ extern "C" HRESULT DAPI SqlSessionDropDatabase(
515 LPWSTR pwzDatabaseEscaped = NULL; 530 LPWSTR pwzDatabaseEscaped = NULL;
516 531
517 hr = SqlSessionDatabaseExists(pidbSession, wzDatabase, pbstrErrorDescription); 532 hr = SqlSessionDatabaseExists(pidbSession, wzDatabase, pbstrErrorDescription);
518 ExitOnFailure(hr, "failed to determine if exists, database: %ls", wzDatabase); 533 SqlExitOnFailure(hr, "failed to determine if exists, database: %ls", wzDatabase);
519 534
520 hr = EscapeSqlIdentifier(wzDatabase, &pwzDatabaseEscaped); 535 hr = EscapeSqlIdentifier(wzDatabase, &pwzDatabaseEscaped);
521 ExitOnFailure(hr, "failed to escape database string"); 536 SqlExitOnFailure(hr, "failed to escape database string");
522 537
523 if (S_OK == hr) 538 if (S_OK == hr)
524 { 539 {
525 hr = StrAllocFormatted(&pwzQuery, L"DROP DATABASE %s", pwzDatabaseEscaped); 540 hr = StrAllocFormatted(&pwzQuery, L"DROP DATABASE %s", pwzDatabaseEscaped);
526 ExitOnFailure(hr, "failed to allocate query to drop database: %ls", pwzDatabaseEscaped); 541 SqlExitOnFailure(hr, "failed to allocate query to drop database: %ls", pwzDatabaseEscaped);
527 542
528 hr = SqlSessionExecuteQuery(pidbSession, pwzQuery, NULL, NULL, pbstrErrorDescription); 543 hr = SqlSessionExecuteQuery(pidbSession, pwzQuery, NULL, NULL, pbstrErrorDescription);
529 ExitOnFailure(hr, "Failed to drop database"); 544 SqlExitOnFailure(hr, "Failed to drop database");
530 } 545 }
531 546
532LExit: 547LExit:
@@ -567,23 +582,23 @@ extern "C" HRESULT DAPI SqlSessionExecuteQuery(
567 // create the command 582 // create the command
568 // 583 //
569 hr = pidbSession->CreateSession(NULL, IID_IDBCreateCommand, (IUnknown**)&pidbCommand); 584 hr = pidbSession->CreateSession(NULL, IID_IDBCreateCommand, (IUnknown**)&pidbCommand);
570 ExitOnFailure(hr, "failed to create database session"); 585 SqlExitOnFailure(hr, "failed to create database session");
571 hr = pidbCommand->CreateCommand(NULL, IID_ICommand, (IUnknown**)&picmd); 586 hr = pidbCommand->CreateCommand(NULL, IID_ICommand, (IUnknown**)&picmd);
572 ExitOnFailure(hr, "failed to create command to execute session"); 587 SqlExitOnFailure(hr, "failed to create command to execute session");
573 588
574 // 589 //
575 // set the sql text into the command 590 // set the sql text into the command
576 // 591 //
577 hr = picmd->QueryInterface(IID_ICommandText, (LPVOID*)&picmdText); 592 hr = picmd->QueryInterface(IID_ICommandText, (LPVOID*)&picmdText);
578 ExitOnFailure(hr, "failed to get command text object for command"); 593 SqlExitOnFailure(hr, "failed to get command text object for command");
579 hr = picmdText->SetCommandText(DBGUID_DEFAULT , wzSql); 594 hr = picmdText->SetCommandText(DBGUID_DEFAULT , wzSql);
580 ExitOnFailure(hr, "failed to set SQL string: %ls", wzSql); 595 SqlExitOnFailure(hr, "failed to set SQL string: %ls", wzSql);
581 596
582 // 597 //
583 // execute the command 598 // execute the command
584 // 599 //
585 hr = picmd->Execute(NULL, (ppirs) ? IID_IRowset : IID_NULL, NULL, &cRows, reinterpret_cast<IUnknown**>(ppirs)); 600 hr = picmd->Execute(NULL, (ppirs) ? IID_IRowset : IID_NULL, NULL, &cRows, reinterpret_cast<IUnknown**>(ppirs));
586 ExitOnFailure(hr, "failed to execute SQL string: %ls", wzSql); 601 SqlExitOnFailure(hr, "failed to execute SQL string: %ls", wzSql);
587 602
588 if (DB_S_ERRORSOCCURRED == hr) 603 if (DB_S_ERRORSOCCURRED == hr)
589 { 604 {
@@ -642,21 +657,21 @@ extern "C" HRESULT DAPI SqlCommandExecuteQuery(
642 // create the command 657 // create the command
643 // 658 //
644 hr = pidbCommand->CreateCommand(NULL, IID_ICommand, (IUnknown**)&picmd); 659 hr = pidbCommand->CreateCommand(NULL, IID_ICommand, (IUnknown**)&picmd);
645 ExitOnFailure(hr, "failed to create command to execute session"); 660 SqlExitOnFailure(hr, "failed to create command to execute session");
646 661
647 // 662 //
648 // set the sql text into the command 663 // set the sql text into the command
649 // 664 //
650 hr = picmd->QueryInterface(IID_ICommandText, (LPVOID*)&picmdText); 665 hr = picmd->QueryInterface(IID_ICommandText, (LPVOID*)&picmdText);
651 ExitOnFailure(hr, "failed to get command text object for command"); 666 SqlExitOnFailure(hr, "failed to get command text object for command");
652 hr = picmdText->SetCommandText(DBGUID_DEFAULT , wzSql); 667 hr = picmdText->SetCommandText(DBGUID_DEFAULT , wzSql);
653 ExitOnFailure(hr, "failed to set SQL string: %ls", wzSql); 668 SqlExitOnFailure(hr, "failed to set SQL string: %ls", wzSql);
654 669
655 // 670 //
656 // execute the command 671 // execute the command
657 // 672 //
658 hr = picmd->Execute(NULL, (ppirs) ? IID_IRowset : IID_NULL, NULL, &cRows, reinterpret_cast<IUnknown**>(ppirs)); 673 hr = picmd->Execute(NULL, (ppirs) ? IID_IRowset : IID_NULL, NULL, &cRows, reinterpret_cast<IUnknown**>(ppirs));
659 ExitOnFailure(hr, "failed to execute SQL string: %ls", wzSql); 674 SqlExitOnFailure(hr, "failed to execute SQL string: %ls", wzSql);
660 675
661 if (DB_S_ERRORSOCCURRED == hr) 676 if (DB_S_ERRORSOCCURRED == hr)
662 { 677 {
@@ -700,14 +715,14 @@ extern "C" HRESULT DAPI SqlGetErrorInfo(
700 715
701 // only ask for error information if the interface supports it. 716 // only ask for error information if the interface supports it.
702 hr = pObjectWithError->QueryInterface(IID_ISupportErrorInfo,(void**)&pISupportErrorInfo); 717 hr = pObjectWithError->QueryInterface(IID_ISupportErrorInfo,(void**)&pISupportErrorInfo);
703 ExitOnFailure(hr, "No error information was found for object."); 718 SqlExitOnFailure(hr, "No error information was found for object.");
704 719
705 hr = pISupportErrorInfo->InterfaceSupportsErrorInfo(IID_InterfaceWithError); 720 hr = pISupportErrorInfo->InterfaceSupportsErrorInfo(IID_InterfaceWithError);
706 ExitOnFailure(hr, "InterfaceWithError is not supported for object with error"); 721 SqlExitOnFailure(hr, "InterfaceWithError is not supported for object with error");
707 722
708 // ignore the return of GetErrorInfo it can succeed and return a NULL pointer in pIErrorInfoAll anyway 723 // ignore the return of GetErrorInfo it can succeed and return a NULL pointer in pIErrorInfoAll anyway
709 hr = ::GetErrorInfo(0, &pIErrorInfoAll); 724 hr = ::GetErrorInfo(0, &pIErrorInfoAll);
710 ExitOnFailure(hr, "failed to get error info"); 725 SqlExitOnFailure(hr, "failed to get error info");
711 726
712 if (S_OK == hr && pIErrorInfoAll) 727 if (S_OK == hr && pIErrorInfoAll)
713 { 728 {
@@ -787,37 +802,37 @@ static HRESULT FileSpecToString(
787 LPWSTR pwz = NULL; 802 LPWSTR pwz = NULL;
788 803
789 hr = StrAllocString(&pwz, L"(", 1024); 804 hr = StrAllocString(&pwz, L"(", 1024);
790 ExitOnFailure(hr, "failed to allocate string for database file info"); 805 SqlExitOnFailure(hr, "failed to allocate string for database file info");
791 806
792 ExitOnNull(*psf->wzName, hr, E_INVALIDARG, "logical name not specified in database file info"); 807 SqlExitOnNull(*psf->wzName, hr, E_INVALIDARG, "logical name not specified in database file info");
793 ExitOnNull(*psf->wzFilename, hr, E_INVALIDARG, "filename not specified in database file info"); 808 SqlExitOnNull(*psf->wzFilename, hr, E_INVALIDARG, "filename not specified in database file info");
794 809
795 hr = StrAllocFormatted(&pwz, L"%sNAME=%s", pwz, psf->wzName); 810 hr = StrAllocFormatted(&pwz, L"%sNAME=%s", pwz, psf->wzName);
796 ExitOnFailure(hr, "failed to format database file info name: %ls", psf->wzName); 811 SqlExitOnFailure(hr, "failed to format database file info name: %ls", psf->wzName);
797 812
798 hr = StrAllocFormatted(&pwz, L"%s, FILENAME='%s'", pwz, psf->wzFilename); 813 hr = StrAllocFormatted(&pwz, L"%s, FILENAME='%s'", pwz, psf->wzFilename);
799 ExitOnFailure(hr, "failed to format database file info filename: %ls", psf->wzFilename); 814 SqlExitOnFailure(hr, "failed to format database file info filename: %ls", psf->wzFilename);
800 815
801 if (0 != psf->wzSize[0]) 816 if (0 != psf->wzSize[0])
802 { 817 {
803 hr = StrAllocFormatted(&pwz, L"%s, SIZE=%s", pwz, psf->wzSize); 818 hr = StrAllocFormatted(&pwz, L"%s, SIZE=%s", pwz, psf->wzSize);
804 ExitOnFailure(hr, "failed to format database file info size: %s", psf->wzSize); 819 SqlExitOnFailure(hr, "failed to format database file info size: %ls", psf->wzSize);
805 } 820 }
806 821
807 if (0 != psf->wzMaxSize[0]) 822 if (0 != psf->wzMaxSize[0])
808 { 823 {
809 hr = StrAllocFormatted(&pwz, L"%s, MAXSIZE=%s", pwz, psf->wzMaxSize); 824 hr = StrAllocFormatted(&pwz, L"%s, MAXSIZE=%s", pwz, psf->wzMaxSize);
810 ExitOnFailure(hr, "failed to format database file info maxsize: %s", psf->wzMaxSize); 825 SqlExitOnFailure(hr, "failed to format database file info maxsize: %ls", psf->wzMaxSize);
811 } 826 }
812 827
813 if (0 != psf->wzGrow[0]) 828 if (0 != psf->wzGrow[0])
814 { 829 {
815 hr = StrAllocFormatted(&pwz, L"%s, FILEGROWTH=%s", pwz, psf->wzGrow); 830 hr = StrAllocFormatted(&pwz, L"%s, FILEGROWTH=%s", pwz, psf->wzGrow);
816 ExitOnFailure(hr, "failed to format database file info growth: %s", psf->wzGrow); 831 SqlExitOnFailure(hr, "failed to format database file info growth: %ls", psf->wzGrow);
817 } 832 }
818 833
819 hr = StrAllocFormatted(&pwz, L"%s)", pwz); 834 hr = StrAllocFormatted(&pwz, L"%s)", pwz);
820 ExitOnFailure(hr, "failed to allocate string for file spec"); 835 SqlExitOnFailure(hr, "failed to allocate string for file spec");
821 836
822 *ppwz = pwz; 837 *ppwz = pwz;
823 pwz = NULL; // null here so it doesn't get freed below 838 pwz = NULL; // null here so it doesn't get freed below
@@ -850,13 +865,13 @@ static HRESULT EscapeSqlIdentifier(
850 if (cchIdentifier == 0 || (wzIdentifier[0] == '[' && wzIdentifier[cchIdentifier-1] == ']')) 865 if (cchIdentifier == 0 || (wzIdentifier[0] == '[' && wzIdentifier[cchIdentifier-1] == ']'))
851 { 866 {
852 hr = StrAllocString(&pwz, wzIdentifier, 0); 867 hr = StrAllocString(&pwz, wzIdentifier, 0);
853 ExitOnFailure(hr, "failed to format database name: %ls", wzIdentifier); 868 SqlExitOnFailure(hr, "failed to format database name: %ls", wzIdentifier);
854 } 869 }
855 else 870 else
856 { 871 {
857 //escape it 872 //escape it
858 hr = StrAllocFormatted(&pwz, L"[%s]", wzIdentifier); 873 hr = StrAllocFormatted(&pwz, L"[%s]", wzIdentifier);
859 ExitOnFailure(hr, "failed to format escaped database name: %ls", wzIdentifier); 874 SqlExitOnFailure(hr, "failed to format escaped database name: %ls", wzIdentifier);
860 } 875 }
861 876
862 *ppwz = pwz; 877 *ppwz = pwz;