Qore OracleExtensions Module Reference  1.0
 All Classes Namespaces Functions Variables Pages
OracleExtensions.qm.dox.h
1 // -*- mode: c++; indent-tabs-mode: nil -*-
2 // @file OracleExtensions.qm OracleExtensions module definition
3 
4 /* OracleExtensions.qm Copyright 2012 Qore Technologies s.r.o
5 
6 Permission is hereby granted, free of charge, to any person obtaining a
7 copy of this software and associated documentation files (the "Software"),
8 to deal in the Software without restriction, including without limitation
9 the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 and/or sell copies of the Software, and to permit persons to whom the
11 Software is furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in
14 all copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 DEALINGS IN THE SOFTWARE.
23 */
24 
25 
26 
27 /* Version History
28  * 2012-02-05 v1.0: Petr Vanek <petr.vanek@qoretechnologies.com>
29  + initial implementation
30 */
31 
248 namespace OracleExtensions {
250 
252 class OracleDatasourceBase : public AbstractDatasource
253 {
254  private :
258  *code autoCode;
259 
260  object m_ds;
261 
262 public:
263 
265  *string getDBName() { return m_ds.getDBName(); }
267  *string getUserName() { return m_ds.getUserName(); }
269  any getServerVersion() { return m_ds.getServerVersion(); }
271  *string getPassword() { return m_ds.getPassword(); }
273  hash getConfigHash() { return m_ds.getConfigHash(); }
275  *int getPort() { return m_ds.getPort(); }
277  string getConfigString() { return m_ds.getConfigString(); }
279  any getClientVersion() { return m_ds.getClientVersion(); }
281  *string getOSEncoding() { return m_ds.getOSEncoding(); }
283  string getDriverName() { return m_ds.getDriverName(); }
285  string getDBEncoding() { return m_ds.getDBEncoding(); }
287  *string getHostName() { return m_ds.getHostName(); }
289  bool inTransaction() { return m_ds.inTransaction(); }
290 
292 
300  nothing beginTransaction(*string client, *string module, *string action);
301 
303 
310 
312 
316  nothing beginTransaction();
317 
318 
320 
329  any exec(string sql);
330 
331 
333 
341  any execRaw(string sql);
342 
343 
345 
354  any select(string sql);
355 
356 
358 
367  any selectRow(string sql);
368 
369 
371 
380  any selectRows(string sql);
381 
382 
384 
393  any vexec(string sql, softlist vargs);
394 
395 
397 
406  any vselect(string sql, softlist vargs);
407 
408 
410 
419  any vselectRow(string sql, softlist vargs);
420 
421 
423 
432  any vselectRows(string sql, softlist vargs);
433 
434 
436 
446  any exec(OracleExtensions::OracleApplicationInfo info, string sql);
447 
448 
450 
459  any execRaw(OracleExtensions::OracleApplicationInfo info, string sql);
460 
461 
463 
473  any select(OracleExtensions::OracleApplicationInfo info, string sql);
474 
475 
477 
488 
489 
491 
502 
503 
505 
515  any vexec(OracleExtensions::OracleApplicationInfo info, string sql);
516 
517 
519 
529  any vselect(OracleExtensions::OracleApplicationInfo info, string sql);
530 
531 
533 
544 
545 
547 
558 
559 
560 };
561 
563 OracleDatasourceBase::constructor(*code userAutoInfo);
564 
565 
567 nothing OracleDatasourceBase::commit();
568 
569 
571 nothing OracleDatasourceBase::rollback();
572 
573 
575 
587 bool OracleDatasourceBase::setAutomaticDBInfo(*OracleExtensions::OracleApplicationInfo item, bool checkTransaction=True);
588 
589 
591 OracleDatasourceBase::setAppInfo(*string client, *string module, *string action, bool fromSystem=True);
592 
593 
594 OracleDatasourceBase::setAppInfo(*OracleExtensions::OracleApplicationInfo audit, bool fromSystem=True);
595 
596 
597 OracleDatasourceBase::setLongOpsProgress(OracleLongOps lo);
598 
599 
600 OracleDatasourceBase::outputEnable(*int bufferSize);
601 
602 
603 OracleDatasourceBase::outputDisable();
604 
605 
606 OracleDatasourceBase::outputPut(softstring text);
607 
608 
609 OracleDatasourceBase::outputPutLine(softstring text);
610 
611 
612 *string OracleDatasourceBase::outputGet();
613 
614 
616 
622 {
623  public :
625  *string client;
627  *string module;
629  *string action;
630 
631 public:
632 
634 
641  constructor(*string client, *string module, *string action);
642 
643 
645  clear();
646 
647 
649 
652  bool isEmpty();
653 
654 
655 }; // class OracleApplicationInfo
656 
658 
666 {
667  public :
669  string op_name;
671  string target_desc;
673  string units;
675  int op_context = 0;
677  int sofar;
680 
681 public:
682  private :
683  // A token which represents the v$session_longops row to update. Set this to set_session_longops_nohint to start a new row. Use the returned value from the prior call to reuse a row.
684  *int rindex;
685  // Saves information across calls to set_session_longops: It is for internal use and should not be modified by the caller.
686  *int slno;
687  // Specifies the object that is being worked on during the long running operation. For example, it could be a table ID that is being sorted. It appears as the TARGET column of v$session_longops.
688  *int target;
689 
690 public:
691 
693 
701 /*OracleLongOps::*/constructor(string op_name, string target_desc, string units, int totalwork) {
702  if (op_name.strlen() > 64)
703  throw "ORACLE-LONGOPS-ERROR",
704  sprintf("Constructor argument 'op_name' must have length 64 bytes max. Got: %d", op_name.strlen());
705  self.op_name = op_name;
706 
707  if (target_desc.strlen() > 32)
708  throw "ORACLE-LONGOPS-ERROR",
709  sprintf("Constructor argument 'target_desc' must have length 32 bytes max. Got: %d", target_desc.strlen());
710  self.target_desc = target_desc;
711 
712  if (target_desc.strlen() > 32)
713  throw "ORACLE-LONGOPS-ERROR",
714  sprintf("Constructor argument 'units' must have length 32 bytes max. Got: %d", target_desc.strlen());
715  self.units = units;
716 
717  if (totalwork < 1)
718  throw "ORACLE-LONGOPS-ERROR",
719  sprintf("Constructor argument 'totalwork' must have greater than 0. Got: %d", totalwork);
720  self.totalwork = totalwork;
721 
722  sofar = 0;
723 };
724 
726 
729 bool /*OracleLongOps::*/inProgress();
730 
731 
733 
738 *int /*OracleLongOps::*/getTarget();
739 
740 
741 }; // class OracleLongOps
742 
744 
750 *int OracleLongOps::getRindex();
751 
753 
759 OracleLongOps::setRindex(int i);
760 
761 
763 
768 *int OracleLongOps::getSlno();
769 
771 
776 OracleLongOps::setSlno(int i);
777 
778 
779 
781 
785 
786 public:
787 
789 
792  constructor(string driver, *string user, *string pass, *string db, *string encoding, *string host, softint min=3, softint max=10, softint port=0, *code userAutoInfo)
793  : OracleExtensions::OracleDatasourceBase(userAutoInfo)
794  {
795  m_ds = new DatasourcePool(driver, user, pass, db, encoding, host, min, max);
796  }
798 
801  constructor(string desc, *code userAutoInfo)
802  : OracleExtensions::OracleDatasourceBase(userAutoInfo)
803  {
804  m_ds = new DatasourcePool(desc);
805  }
807 
810  constructor(hash opts, *code userAutoInfo)
811  : OracleExtensions::OracleDatasourceBase(userAutoInfo)
812  {
813  m_ds = new DatasourcePool(opts);
814  }
816 
820  constructor(DatasourcePool ds, *code userAutoInfo)
821  : OracleExtensions::OracleDatasourceBase(userAutoInfo)
822  {
823  m_ds = ds;
824  }
825 
826 }; // class OracleDatasourcePool
827 
828 
830 
834 
835 public:
836 
838 
841  constructor(string driver, *string user, *string pass, *string db, *string encoding, *string host, softint port=0, *code userAutoInfo)
842  : OracleExtensions::OracleDatasourceBase(userAutoInfo)
843  {
844  m_ds = new Datasource(driver, user, pass, db, encoding, host, port);
845  }
847 
850  constructor(string desc, *code userAutoInfo)
851  : OracleExtensions::OracleDatasourceBase(userAutoInfo)
852  {
853  m_ds = new Datasource(desc);
854  }
856 
859  constructor(hash opts, *code userAutoInfo)
860  : OracleExtensions::OracleDatasourceBase(userAutoInfo)
861  {
862  m_ds = new Datasource(opts);
863  }
865 
869  constructor(Datasource ds, *code userAutoInfo)
870  : OracleExtensions::OracleDatasourceBase(userAutoInfo)
871  {
872  m_ds = ds;
873  }
874 
875  nothing setAutoCommit(bool auto);
876 
877 
878 }; // class OracleDatasource
879 
880 
881 } // namespace OracleExtensions
882 
883 
884 
885 
886 // qore -DOracleExtensionsTest=1 OracleExtensions.qm
887 extern string connstr = "oracle:pvanek_omq/omq@xbox";
888 
889 
890 any test(object o, string m);
891 
892 
893 testData(object o1, object o2, string m);
894 
895 
896 
897 extern bool backRun = True;
898 backRunLogger();
899 
900 
901 testLongOps(object o);
902 
903 
904 testDBMSOut(object o)
905 {
906  printf("testDBMS\n");
907 
908  o.outputEnable();
909  o.outputPutLine('foo');
910  o.outputPutLine(111);
911  o.outputPutLine(now());
912  o.exec("begin dbms_output.put_line(%v); end;", "hey, it's server here");
913 
914  *string res = o.outputGet();
915  printf("DBMS_OUTPUT RESULT:\n%N\n", res);
916  o.outputDisable();
917 }
918 
920 {
921 // printf("getAutoInfo: called\n");
922  return new OracleExtensions::OracleApplicationInfo("user module", "auto info", sprintf("auto info: %n", now()));
923 }
924 
925 baseTest(object dd);
926 
927 
928 testDataDiffs();
929 
930 
931 testPoolConnectionCount();
932 
933 
934 {
935  background backRunLogger();
936  on_exit backRun = False;
937 
938  OracleExtensions::OracleDatasource dd(connstr, \getAutoInfo());
939  dd.setAutoCommit(False);
940  baseTest(dd);
941 
942  OracleExtensions::OracleDatasourcePool dp(connstr, \getAutoInfo());
943  baseTest(dp);
944 
945  testDataDiffs();
946 
947  testPoolConnectionCount();
948 }
949 
clear()
Clear values from all attributes.
*code autoCode
user code used in setAutomaticDBInfo when there is no OracleApplicationInfo value provided ...
Definition: OracleExtensions.qm.dox.h:258
string op_name
The name of the long running task. It appears as the OPNAME column of v$session_longops.
Definition: OracleExtensions.qm.dox.h:669
any execRaw(string sql)
execRaw with automatic approach of getting application info
constructor(string driver, *string user, *string pass, *string db, *string encoding, *string host, softint port=0, *code userAutoInfo)
Standard Qore::DatasourcePool constructor.
Definition: OracleExtensions.qm.dox.h:841
*string getHostName()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:287
OracleDatasource class implementation.
Definition: OracleExtensions.qm.dox.h:833
string units
Specifies the units in which sofar and totalwork are being represented. It appears as the UNITS field...
Definition: OracleExtensions.qm.dox.h:673
any getServerVersion()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:269
*int getTarget()
Get the value of target attribute.
nothing beginTransaction()
Start new transaction with potential automatic Aplication info set.
*string client
Supplies any additional information about the client application. This information is stored in the V...
Definition: OracleExtensions.qm.dox.h:625
bool inTransaction()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:289
constructor(string op_name, string target_desc, string units, int totalwork)
Create an OracleLongOps instance.
Definition: OracleExtensions.qm.dox.h:701
constructor(string desc, *code userAutoInfo)
Standard Qore::DatasourcePool constructor.
Definition: OracleExtensions.qm.dox.h:801
constructor(*string client, *string module, *string action)
Create OracleExtensions::OracleApplicationInfo instance.
*string getUserName()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:267
*string getOSEncoding()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:281
*string action
Name of current action within the current module. If you do not want to specify an action...
Definition: OracleExtensions.qm.dox.h:629
string getDBEncoding()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:285
*string getPassword()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:271
constructor(string driver, *string user, *string pass, *string db, *string encoding, *string host, softint min=3, softint max=10, softint port=0, *code userAutoInfo)
Standard Qore::DatasourcePool constructor.
Definition: OracleExtensions.qm.dox.h:792
any selectRow(string sql)
selectRow with automatic approach of getting application info
any vselectRow(string sql, softlist vargs)
vselectRow with automatic approach of getting application info
constructor(hash opts, *code userAutoInfo)
Standard Qore::DatasourcePool constructor.
Definition: OracleExtensions.qm.dox.h:810
*int getPort()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:275
*string getDBName()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:265
any exec(string sql)
exec with automatic approach of getting application info
int totalwork
Any number the client wants to store. It appears in the TOTALWORK column of v$session_longops. This is typically an estimate of the total amount of work needed to be done in this long running operation.
Definition: OracleExtensions.qm.dox.h:679
Qore wrapper/helper for Long Operations.
Definition: OracleExtensions.qm.dox.h:665
*OracleExtensions::OracleApplicationInfo userInfo
potential user Application Info set by beginTransaction or explicit call of setAppInfo ...
Definition: OracleExtensions.qm.dox.h:256
OracleExtensions::OracleApplicationInfo holds user info for Application Info.
Definition: OracleExtensions.qm.dox.h:621
any vselect(string sql, softlist vargs)
vselect with automatic approach of getting application info
int sofar
Any number the client wants to store. It appears in the SOFAR column of v$session_longops. This is typically the amount of work which has been done so far.
Definition: OracleExtensions.qm.dox.h:677
any vexec(string sql, softlist vargs)
vexec with automatic approach of getting application info
bool isEmpty()
Check if is the instance empty or with at least one value.
any vselectRows(string sql, softlist vargs)
vselectRows with automatic approach of getting application info
*string module
Name of module that is currently running. When the current module terminates, call this procedure wit...
Definition: OracleExtensions.qm.dox.h:627
string target_desc
The description of the object being manipulated in this long operation. This provides a caption for t...
Definition: OracleExtensions.qm.dox.h:671
any getClientVersion()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:279
string getDriverName()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:283
string getConfigString()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:277
constructor(string desc, *code userAutoInfo)
Standard Qore::DatasourcePool constructor.
Definition: OracleExtensions.qm.dox.h:850
int op_context
Any number the client wants to store. It appears in the CONTEXT column of v$session_longops.
Definition: OracleExtensions.qm.dox.h:675
hash getConfigHash()
AbstractDatasource implementation for Datasource and datasourcePool.
Definition: OracleExtensions.qm.dox.h:273
any selectRows(string sql)
selectRows with automatic approach of getting application info
OracleDatasourcePool class implementation.
Definition: OracleExtensions.qm.dox.h:784
any select(string sql)
select with automatic approach of getting application info
bool inProgress()
Get info if is the long operation finished or not from the totalwork/sofar comparsion.
constructor(Datasource ds, *code userAutoInfo)
New constructor: use already existing Datasource.
Definition: OracleExtensions.qm.dox.h:869
A base class for OracleDatasource and OracleDatasourcePool. Not intended to be used directly...
Definition: OracleExtensions.qm.dox.h:252
constructor(hash opts, *code userAutoInfo)
Standard Qore::DatasourcePool constructor.
Definition: OracleExtensions.qm.dox.h:859
constructor(DatasourcePool ds, *code userAutoInfo)
New constructor: use already existing DatasourcePool.
Definition: OracleExtensions.qm.dox.h:820