zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #05097
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
William Candillon has proposed merging lp:~zorba-coders/zorba/compile_queryplan into lp:zorba.
Requested reviews:
Chris Hillery (ceejatec)
Matthias Brantner (matthias-brantner)
For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/compile_queryplan/+merge/93780
Add --compile-plan and --execute-plan option to zorba command line.
Example:
zorba -q 1+1 --compile-plan > test.xqc
zorba -q test.xqc -f --execute-plan
--
https://code.launchpad.net/~zorba-coders/zorba/compile_queryplan/+merge/93780
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'ChangeLog'
--- ChangeLog 2012-02-18 00:36:22 +0000
+++ ChangeLog 2012-02-20 08:19:22 +0000
@@ -2,6 +2,7 @@
version 2.2
+ * Add --compile-plan (-c) and --execute-plan (-e) options to zorba command line.
* Fixed bug 923015 (clone() not implemented for full-text expressions)
* No-copy optimization: avoids copying nodes during node-constructor expressions.
* Added external function annotations %ann:propagates-input-nodes and
=== modified file 'bin/zorbacmd.cpp'
--- bin/zorbacmd.cpp 2012-01-12 14:21:09 +0000
+++ bin/zorbacmd.cpp 2012-02-20 08:19:22 +0000
@@ -38,6 +38,7 @@
#include <zorba/iterator.h>
#include <zorba/xquery_functions.h>
#include <zorba/uri_resolvers.h>
+#include <zorba/serialization_callback.h>
#include <zorba/store_manager.h>
@@ -72,6 +73,24 @@
OneToOneURIMapper theStopWordsMapper(EntityData::STOP_WORDS);
OneToOneURIMapper theThesaurusMapper(EntityData::THESAURUS);
#endif
+class URIMapperSerializationCallback : public SerializationCallback
+{
+ private:
+ std::vector<URIMapper*> theURIMappers;
+
+ public:
+ void addURIMapper(URIMapper* lURIMapper)
+ {
+ theURIMappers.push_back(lURIMapper);
+ }
+
+ virtual URIMapper*
+ getURIMapper(size_t i) const
+ {
+ return theURIMappers[i];
+ }
+};
+URIMapperSerializationCallback theSerializationCallback;
bool
populateStaticContext(
@@ -149,7 +168,11 @@
for (; lIter != end; ++lIter) {
theStopWordsMapper.addMapping(lIter->uri, lIter->value);
}
- aStaticContext->registerURIMapper(&theStopWordsMapper);
+ if(aProperties.executePlan()) {
+ theSerializationCallback.addURIMapper(&theStopWordsMapper);
+ } else {
+ aStaticContext->registerURIMapper(&theStopWordsMapper);
+ }
}
{
ZorbaCMDProperties::FullText_t::const_iterator lIter = aProperties.thesaurusBegin();
@@ -157,7 +180,11 @@
for (; lIter != end; ++lIter) {
theThesaurusMapper.addMapping(lIter->uri, lIter->value);
}
- aStaticContext->registerURIMapper(&theThesaurusMapper);
+ if(aProperties.executePlan()) {
+ theSerializationCallback.addURIMapper(&theStopWordsMapper);
+ } else {
+ aStaticContext->registerURIMapper(&theThesaurusMapper);
+ }
}
#endif
return true;
@@ -503,7 +530,9 @@
unsigned long lNumExecutions = properties.multiple();
bool lIndent = properties.indent();
bool doTiming = properties.timing();
-
+ bool compilePlan = properties.compilePlan();
+ bool executePlan = properties.executePlan();
+ std::ostringstream lOut;
Zorba_CompilerHints lHints;
// default is O1 in the Zorba_CompilerHints constructor
@@ -568,7 +597,11 @@
query->registerDiagnosticHandler(&diagnosticHandler);
query->setFileName(qfilepath);
- query->compile(qfile, staticContext, lHints);
+ if(executePlan) {
+ query->loadExecutionPlan(qfile, &theSerializationCallback);
+ } else {
+ query->compile(qfile, staticContext, lHints);
+ }
if (doTiming)
{
@@ -631,7 +664,11 @@
}
else
{
- query->execute(outputStream, &lSerOptions);
+ if (compilePlan) {
+ query->saveExecutionPlan(outputStream, ZORBA_USE_BINARY_ARCHIVE, SAVE_UNUSED_FUNCTIONS);
+ } else {
+ query->execute(outputStream, &lSerOptions);
+ }
if (properties.trailingNl()) {
outputStream << std::endl;
}
=== modified file 'bin/zorbacmdproperties.txt'
--- bin/zorbacmdproperties.txt 2011-10-21 08:07:43 +0000
+++ bin/zorbacmdproperties.txt 2012-02-20 08:19:22 +0000
@@ -35,3 +35,5 @@
("trailing-nl", "Output a trailing newline after the result of the query.")
("stop-words", po::value<std::vector<std::string> >(), "Mapping specifying a stop-words URI to another.")
("thesaurus", po::value<std::vector<std::string> >(), "Mapping specifying a thesaurus URI to another.")
+("compile-plan,c", "Output the query plan as binary.")
+("execute-plan,e", "Execute a binary query plan. Binary query plans can be generated using the --compile-plan option.")
=== modified file 'bin/zorbacmdproperties_base.h'
--- bin/zorbacmdproperties_base.h 2011-10-21 08:07:43 +0000
+++ bin/zorbacmdproperties_base.h 2012-02-20 08:19:22 +0000
@@ -34,7 +34,7 @@
class ZorbaCMDPropertiesBase : public ::zorba::PropertiesBase {
protected:
const char **get_all_options () const {
- static const char *result [] = { "--timing", "--output-file", "--serialization-parameter", "--serialize-html", "--serialize-text", "--indent", "--print-query", "--print-errors-as-xml", "--byte-order-mark", "--omit-xml-declaration", "--base-uri", "--boundary-space", "--default-collation", "--construction-mode", "--ordering-mode", "--multiple", "--query", "--as-files", "--external-variable", "--context-item", "--optimization-level", "--lib-module", "--parse-only", "--compile-only", "--no-serializer", "--debug", "--debug-host", "--debug-port", "--no-logo", "--timeout", "--uri-path", "--lib-path", "--module-path", "--option", "--trailing-nl", "--stop-words", "--thesaurus", NULL };
+ static const char *result [] = { "--timing", "--output-file", "--serialization-parameter", "--serialize-html", "--serialize-text", "--indent", "--print-query", "--print-errors-as-xml", "--byte-order-mark", "--omit-xml-declaration", "--base-uri", "--boundary-space", "--default-collation", "--construction-mode", "--ordering-mode", "--multiple", "--query", "--as-files", "--external-variable", "--context-item", "--optimization-level", "--lib-module", "--parse-only", "--compile-only", "--no-serializer", "--debug", "--debug-host", "--debug-port", "--no-logo", "--timeout", "--uri-path", "--lib-path", "--module-path", "--option", "--trailing-nl", "--stop-words", "--thesaurus", "--compile-plan", "--execute-plan", NULL };
return result;
}
bool theTiming;
@@ -74,6 +74,8 @@
bool theTrailingNl;
std::vector<std::string> theStopWords;
std::vector<std::string> theThesaurus;
+ bool theCompilePlan;
+ bool theExecutePlan;
void initialize () {
theTiming = false;
@@ -97,6 +99,8 @@
theNoLogo = false;
theTimeout = -1;
theTrailingNl = false;
+ theCompilePlan = false;
+ theExecutePlan = false;
}
public:
const bool &timing () const { return theTiming; }
@@ -136,6 +140,8 @@
const bool &trailingNl () const { return theTrailingNl; }
const std::vector<std::string> &stopWords () const { return theStopWords; }
const std::vector<std::string> &thesaurus () const { return theThesaurus; }
+ const bool &compilePlan () const { return theCompilePlan; }
+ const bool &executePlan () const { return theExecutePlan; }
std::string load_argv (int argc, const char **argv) {
if (argv == NULL) return "";
@@ -299,6 +305,12 @@
if ((*argv) [1] == '-' || (*argv) [2] == '\0') { d = 0; ++argv; }
if (*argv == NULL) { result = "No value given for --thesaurus option"; break; } init_val (*argv, theThesaurus, d);
}
+ else if (strcmp (*argv, "--compile-plan") == 0 || strncmp (*argv, "-c", 2) == 0) {
+ theCompilePlan = true;
+ }
+ else if (strcmp (*argv, "--execute-plan") == 0 || strncmp (*argv, "-e", 2) == 0) {
+ theExecutePlan = true;
+ }
else if (strcmp (*argv, "--") == 0) {
copy_args (++argv);
break;
@@ -352,6 +364,8 @@
"--trailing-nl\nOutput a trailing newline after the result of the query.\n\n"
"--stop-words\nMapping specifying a stop-words URI to another.\n\n"
"--thesaurus\nMapping specifying a thesaurus URI to another.\n\n"
+"--compile-plan, -c\nOutput the query plan as binary.\n\n"
+"--execute-plan, -e\nExecute a binary query plan. Binary query plans can be generated using the --compile-plan option.\n\n"
;
}
=== modified file 'doc/zorba/commandline.dox'
--- doc/zorba/commandline.dox 2011-11-04 11:31:13 +0000
+++ doc/zorba/commandline.dox 2012-02-20 08:19:22 +0000
@@ -132,6 +132,12 @@
--thesaurus
Mapping specifying a thesaurus URI to another.
+
+--compile, -c
+Output the query plan as binary.
+
+--execute-plan, -e
+Execute a binary query plan. Binary query plans can be generated using the --compile-plan option.
\endverbatim
\section commandlineexamples Examples
=== modified file 'src/store/naive/store_properties.h'
--- src/store/naive/store_properties.h 2012-01-14 22:52:27 +0000
+++ src/store/naive/store_properties.h 2012-02-20 08:19:22 +0000
@@ -30,65 +30,47 @@
#ifndef ZORBA_STORE_STOREPROPERTIES
#define ZORBA_STORE_STOREPROPERTIES
-namespace zorba
-{
-namespace store
-{
-
-
-class StoreProperties : public ::zorba::PropertiesBase
-{
+namespace zorba { namespace store {
+class StoreProperties : public ::zorba::PropertiesBase {
protected:
- const char** get_all_options() const
- {
+ const char **get_all_options () const {
static const char *result [] = { "--build-dataguide", "--store-trace-level", NULL };
return result;
}
-
bool theBuildDataguide;
long theStoreTraceLevel;
- void initialize ()
- {
+ void initialize () {
theBuildDataguide = false;
theStoreTraceLevel = 0;
}
public:
- const bool& buildDataguide() const { return theBuildDataguide; }
- const long& storeTraceLevel() const { return theStoreTraceLevel; }
+ const bool &buildDataguide () const { return theBuildDataguide; }
+ const long &storeTraceLevel () const { return theStoreTraceLevel; }
- std::string load_argv(int argc, const char **argv)
- {
+ std::string load_argv (int argc, const char **argv) {
if (argv == NULL) return "";
std::string result;
- for (++argv; *argv != NULL; ++argv)
- {
+ for (++argv; *argv != NULL; ++argv) {
if (strcmp (*argv, "--help") == 0 || strcmp (*argv, "-h") == 0)
return "!HELP";
else if (strcmp (*argv, "--version") == 0)
return "!VER";
- else if (strcmp (*argv, "--build-dataguide") == 0)
- {
+ else if (strcmp (*argv, "--build-dataguide") == 0) {
theBuildDataguide = true;
}
- else if (strcmp (*argv, "--store-trace-level") == 0)
- {
+ else if (strcmp (*argv, "--store-trace-level") == 0) {
int d = 2;
if ((*argv) [1] == '-' || (*argv) [2] == '\0') { d = 0; ++argv; }
if (*argv == NULL) { result = "No value given for --store-trace-level option"; break; } init_val (*argv, theStoreTraceLevel, d);
}
- else if (strcmp (*argv, "--") == 0)
- {
+ else if (strcmp (*argv, "--") == 0) {
copy_args (++argv);
break;
- }
- else if ((*argv) [0] == '-')
- {
+ } else if ((*argv) [0] == '-') {
result = "unknown command line option "; result += *argv; break;
- }
- else
- {
+ } else {
copy_args (argv);
break;
}
@@ -97,21 +79,20 @@
return result;
}
- const char* get_help_msg () const
- {
+ const char *get_help_msg () const {
return
"--build-dataguide\nbuild-dataguide (true/false)\n\n"
"--store-trace-level\nstore trace level (<= 0 : no tracing)\n\n"
;
}
- static const StoreProperties* instance()
- {
+ static const StoreProperties *instance () {
static StoreProperties result;
return &result;
}
- StoreProperties() { initialize(); }
+ StoreProperties () { initialize (); }
+
};
} } // namespaces
=== modified file 'src/system/zorba_properties.h'
--- src/system/zorba_properties.h 2012-01-11 17:30:25 +0000
+++ src/system/zorba_properties.h 2012-02-20 08:19:22 +0000
@@ -30,20 +30,13 @@
#ifndef ZORBA_ZORBAPROPERTIES
#define ZORBA_ZORBAPROPERTIES
-namespace zorba
-{
-
-class ZORBA_DLL_PUBLIC ZorbaProperties : public ::zorba::PropertiesBase
-{
+namespace zorba {
+class ZORBA_DLL_PUBLIC ZorbaProperties : public ::zorba::PropertiesBase {
protected:
- const char** get_all_options() const
- {
- static const char* result [] =
- { "--trace-parsing", "--trace-scanning", "--use-serializer", "--optimizer", "--result-file", "--debug-file", "--abort", "--query", "--print-query", "--print-time", "--print-ast", "--print-xqdoc", "--print-translated", "--print-normalized", "--print-optimized", "--print-iterator-tree", "--print-item-flow", "--print-static-types", "--dump-lib", "--stable-iterator-ids", "--no-tree-ids", "--print-intermediate-opt", "--print-locations", "--force-gflwor", "--reorder-globals", "--specialize-num", "--specialize-cmp", "--inline-udf", "--loop-hoisting", "--infer-joins", "--no-copy-optim", "--serialize-only-query", "--trace-translator", "--trace-codegen", "--trace-fulltext", "--debug", "--compile-only", "--tz", "--external-var", "--serializer-param", "--iter-plan-test", "--dot-plan-file", "--max-udf-call-depth", NULL };
-
+ const char **get_all_options () const {
+ static const char *result [] = { "--trace-parsing", "--trace-scanning", "--use-serializer", "--optimizer", "--result-file", "--debug-file", "--abort", "--query", "--print-query", "--print-time", "--print-ast", "--print-xqdoc", "--print-translated", "--print-normalized", "--print-optimized", "--print-iterator-tree", "--print-item-flow", "--print-static-types", "--dump-lib", "--stable-iterator-ids", "--no-tree-ids", "--print-intermediate-opt", "--print-locations", "--force-gflwor", "--reorder-globals", "--specialize-num", "--specialize-cmp", "--inline-udf", "--loop-hoisting", "--infer-joins", "--no-copy-optim", "--serialize-only-query", "--trace-translator", "--trace-codegen", "--trace-fulltext", "--debug", "--compile-only", "--tz", "--external-var", "--serializer-param", "--iter-plan-test", "--dot-plan-file", "--max-udf-call-depth", NULL };
return result;
}
-
bool theTraceParsing;
bool theTraceScanning;
bool theUseSerializer;
@@ -75,7 +68,7 @@
bool theLoopHoisting;
bool theInferJoins;
bool theNoCopyOptim;
- int theSerializeOnlyQuery;
+ bool theSerializeOnlyQuery;
bool theTraceTranslator;
bool theTraceCodegen;
bool theTraceFulltext;
@@ -88,8 +81,7 @@
std::string theDotPlanFile;
uint32_t theMaxUdfCallDepth;
- void initialize()
- {
+ void initialize () {
theTraceParsing = false;
theTraceScanning = false;
theUseSerializer = false;
@@ -118,7 +110,7 @@
theLoopHoisting = true;
theInferJoins = true;
theNoCopyOptim = true;
- theSerializeOnlyQuery = -1;
+ theSerializeOnlyQuery = false;
theTraceTranslator = false;
theTraceCodegen = false;
theTraceFulltext = false;
@@ -127,7 +119,6 @@
theIterPlanTest = false;
theMaxUdfCallDepth = 1024;
}
-
public:
const bool &traceParsing () const { return theTraceParsing; }
const bool &traceScanning () const { return theTraceScanning; }
@@ -159,8 +150,8 @@
const bool &inlineUdf () const { return theInlineUdf; }
const bool &loopHoisting () const { return theLoopHoisting; }
const bool &inferJoins () const { return theInferJoins; }
- const bool &noCopyOptim() const { return theNoCopyOptim; }
- const int& serializeOnlyQuery() const { return theSerializeOnlyQuery; }
+ const bool &noCopyOptim () const { return theNoCopyOptim; }
+ const bool &serializeOnlyQuery () const { return theSerializeOnlyQuery; }
const bool &traceTranslator () const { return theTraceTranslator; }
const bool &traceCodegen () const { return theTraceCodegen; }
const bool &traceFulltext () const { return theTraceFulltext; }
@@ -173,8 +164,7 @@
const std::string &dotPlanFile () const { return theDotPlanFile; }
const uint32_t &maxUdfCallDepth () const { return theMaxUdfCallDepth; }
- std::string load_argv (int argc, const char **argv)
- {
+ std::string load_argv (int argc, const char **argv) {
if (argv == NULL) return "";
std::string result;
@@ -195,14 +185,12 @@
else if (strcmp (*argv, "--optimizer") == 0 || strncmp (*argv, "-O", 2) == 0) {
int d = 2;
if ((*argv) [1] == '-' || (*argv) [2] == '\0') { d = 0; ++argv; }
- if (*argv == NULL) { result = "No value given for --optimizer option"; break; }
- init_val (*argv, theOptimizer, d);
+ if (*argv == NULL) { result = "No value given for --optimizer option"; break; } init_val (*argv, theOptimizer, d);
}
else if (strcmp (*argv, "--result-file") == 0 || strncmp (*argv, "-o", 2) == 0) {
int d = 2;
if ((*argv) [1] == '-' || (*argv) [2] == '\0') { d = 0; ++argv; }
- if (*argv == NULL) { result = "No value given for --result-file option"; break; }
- init_val (*argv, theResultFile, d);
+ if (*argv == NULL) { result = "No value given for --result-file option"; break; } init_val (*argv, theResultFile, d);
}
else if (strcmp (*argv, "--debug-file") == 0) {
int d = 2;
@@ -297,20 +285,15 @@
if ((*argv) [1] == '-' || (*argv) [2] == '\0') { d = 0; ++argv; }
if (*argv == NULL) { result = "No value given for --infer-joins option"; break; } init_val (*argv, theInferJoins, d);
}
- else if (strcmp (*argv, "--no-copy-optim") == 0)
- {
+ else if (strcmp (*argv, "--no-copy-optim") == 0) {
int d = 2;
if ((*argv) [1] == '-' || (*argv) [2] == '\0') { d = 0; ++argv; }
- if (*argv == NULL) { result = "No value given for --no-copy-optim option"; break; }
- init_val (*argv, theNoCopyOptim, d);
+ if (*argv == NULL) { result = "No value given for --no-copy-optim option"; break; } init_val (*argv, theNoCopyOptim, d);
}
- else if (strcmp (*argv, "--serialize-only-query") == 0)
- {
+ else if (strcmp (*argv, "--serialize-only-query") == 0) {
int d = 2;
if ((*argv) [1] == '-' || (*argv) [2] == '\0') { d = 0; ++argv; }
- if (*argv == NULL)
- { result = "No value given for --serialize-only-query option"; break; }
- init_val(*argv, theSerializeOnlyQuery, d);
+ if (*argv == NULL) { result = "No value given for --serialize-only-query option"; break; } init_val (*argv, theSerializeOnlyQuery, d);
}
#ifndef NDEBUG
else if (strcmp (*argv, "--trace-translator") == 0 || strncmp (*argv, "-l", 2) == 0) {
@@ -371,9 +354,7 @@
return result;
}
-
- const char* get_help_msg() const
- {
+ const char *get_help_msg () const {
return
"--trace-parsing, -p\ntrace parsing\n\n"
"--trace-scanning, -s\ntrace scanning\n\n"
@@ -405,8 +386,8 @@
"--inline-udf\ninline functions (1=enabled (default), 0=off)\n\n"
"--loop-hoisting\nhoist expressions out of loops (1=enabled (default), 0=off)\n\n"
"--infer-joins\ninfer joins (1=enabled (default), 0=off)\n\n"
-"--no-copy-optim\napply the no-copy optimization (1=enabled (default), 0=off)\n\n"
-"--serialize-only-query\nserialize-only-query (<0=unknown (default), 1=enabled, 0=off)\n\n"
+"--no-copy-optim\nno copy optim (1=enabled (default), 0=off)\n\n"
+"--serialize-only-query\nserialize-only query (1=true, 0=false (default))\n\n"
#ifndef NDEBUG
"--trace-translator, -l\ntrace the translator\n\n"
"--trace-codegen, -c\ntrace the codegenerator\n\n"
@@ -423,16 +404,15 @@
;
}
- static const ZorbaProperties* instance()
- {
+ static const ZorbaProperties *instance () {
static ZorbaProperties result;
return &result;
}
- ZorbaProperties() { initialize (); }
+ ZorbaProperties () { initialize (); }
+
};
-
} // namespaces
#endif // ZORBA_ZORBAPROPERTIES
Follow ups
-
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: noreply, 2012-02-24
-
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: Zorba Build Bot, 2012-02-24
-
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: Zorba Build Bot, 2012-02-24
-
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: Chris Hillery, 2012-02-24
-
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: Zorba Build Bot, 2012-02-23
-
Re: [Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: Zorba Build Bot, 2012-02-23
-
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: William Candillon, 2012-02-23
-
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: Zorba Build Bot, 2012-02-23
-
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: Zorba Build Bot, 2012-02-23
-
Re: [Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: Zorba Build Bot, 2012-02-23
-
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: William Candillon, 2012-02-23
-
[Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: William Candillon, 2012-02-23
-
Re: [Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: William Candillon, 2012-02-23
-
Re: [Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: Matthias Brantner, 2012-02-22
-
Re: [Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: William Candillon, 2012-02-22
-
Re: [Merge] lp:~zorba-coders/zorba/compile_queryplan into lp:zorba
From: Matthias Brantner, 2012-02-22