summaryrefslogtreecommitdiffstats
path: root/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Query.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Query.cpp')
-rw-r--r--sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Query.cpp178
1 files changed, 178 insertions, 0 deletions
diff --git a/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Query.cpp b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Query.cpp
new file mode 100644
index 0000000000..fe3f96e132
--- /dev/null
+++ b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Query.cpp
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#include "samples.h"
+using namespace std;
+
+void Query::sample()
+{
+ cout << " ********** Query sample *******************" << endl;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ /**
+ * Create some types
+ */
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ mdg->addType("myspace","Employee");
+
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool= mdg->getType("commonj.sdo","Boolean");
+ const Type& tint= mdg->getType("commonj.sdo","Integer");
+
+ const Type& tc = mdg->getType("myspace","Company");
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+
+ /**
+ * The company
+ */
+
+ mdg->addPropertyToType(tc,"name",tstring); // single string name
+ mdg->addPropertyToType(tc,"departments",
+ td,true); // many departments
+ mdg->addPropertyToType(tc,"employee of the month"
+ , te, false, false, false); // reference to employee
+
+ /**
+ * The department
+ */
+
+ mdg->addPropertyToType(td,"name", tstring); // single string name
+ mdg->addPropertyToType(td,"employees",te,
+ true,false,true); // many employees
+
+
+ /**
+ * The employee
+ */
+
+ mdg->addPropertyToType(te,"isFullTime",tbool);
+ mdg->addPropertyToType(te,"employeeNumber",tint);
+ mdg->addPropertyToType(te,"name",tstring);
+
+
+ const Type& tcc = mdg->getType("myspace","Company");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ // The departments
+
+ DataObjectPtr dept = dor->createDataObject("departments");
+ dept->setCString("name","Shipping");
+
+ DataObjectPtr dept2 = dor->createDataObject("departments");
+ dept2->setCString("name","Buying");
+
+ // The employees
+
+ DataObjectPtr emp1 = dept->createDataObject("employees");
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ DataObjectPtr emp3 = dept->createDataObject("employees");
+ DataObjectPtr emp4 = dept2->createDataObject("employees");
+
+
+ emp1->setBoolean("isFullTime",true);
+ emp1->setInteger("employeeNumber",65443);
+ emp1->setCString("name","Norman");
+
+
+ emp2->setBoolean("isFullTime",false);
+ emp2->setInteger("employeeNumber",64778);
+ emp2->setCString("name","Carl");
+
+ emp3->setBoolean("isFullTime",true);
+ emp3->setInteger("employeeNumber",61990);
+ emp3->setCString("name","Amanda");
+
+ emp4->setBoolean("isFullTime",true);
+ emp4->setInteger("employeeNumber",56789);
+ emp4->setCString("name","Donna");
+
+ dor->setDataObject("employee of the month",emp4); // Donna is referenced.
+
+
+ try {
+
+ // access the first employee of the first department who is not full time
+
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/employees[isFullTime=false]");
+ cout << "Carl should be the first part timer: " << dob1->getCString("name") << " is." <<endl;
+
+ // get the same employee by index
+
+ DataObjectPtr dob2 = dor->getDataObject("departments[1]/employees[2]");
+ cout << "Carl should be employees[2]:" << dob2->getCString("name") << " is." << endl;
+
+ // use the dot notation to get the same employee
+
+ DataObjectPtr dob3 = dor->getDataObject("departments.0/employees.1");
+ cout << "Carl should be employees.1:" << dob3->getCString("name") << " is." << endl;
+
+ // get the reference...
+
+ DataObjectPtr dob4 = dor->getDataObject("employee of the month");
+ cout << "Donna should be employee of the month:" << dob4->getCString("name") << " is." << endl;
+
+ // And by employee number...
+
+ DataObjectPtr dob5 = dor->getDataObject("departments[2]/employees[employeeNumber=56789]");
+ cout << "Donna should be employee 56789:" << dob5->getCString("name") << " is." << endl;
+
+ // If the query yields no value because the element doesnt exist...
+
+ try
+ {
+ DataObjectPtr dob6 = dor->getDataObject("departments[1]/employees[employeeNumber=56789]");
+ cout << "Did not get the expected exception" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Expected an IndexOutOfRangeException and got " << e.getEClassName() << endl;
+ }
+
+ // If the query yields no value because the path is invalid...
+
+
+ try
+ {
+ DataObjectPtr dob7 = dor->getDataObject("departments[fish]/employees[0]");
+ cout << "Did not get the expected exception" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Expected an PathNotFoundException and got " << e.getEClassName() << endl;
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Unexpected error in Query " << e << endl;
+ }
+
+
+ cout << " ********** End Query Sample **************" << endl;
+}