diff --git a/Ahuacatl/ahuacatl-functions.c b/Ahuacatl/ahuacatl-functions.c index 41d5f86842..91c641077a 100644 --- a/Ahuacatl/ahuacatl-functions.c +++ b/Ahuacatl/ahuacatl-functions.c @@ -119,7 +119,7 @@ TRI_associative_pointer_t* TRI_InitialiseFunctionsAql (void) { REGISTER_FUNCTION("TOBOOL", "CAST_BOOL", true, false, 1, 1); REGISTER_FUNCTION("TONULL", "CAST_NULL", true, false, 1, 1); - // string concat + // string functions REGISTER_FUNCTION("CONCAT", "STRING_CONCAT", true, false, 2, 256); REGISTER_FUNCTION("CONCATSEPARATOR", "STRING_CONCAT_SEPARATOR", true, false, 3, 256); REGISTER_FUNCTION("CHARLENGTH", "STRING_LENGTH", true, false, 1, 1); @@ -142,9 +142,10 @@ TRI_associative_pointer_t* TRI_InitialiseFunctionsAql (void) { REGISTER_FUNCTION("ABS", "NUMBER_ABS", true, false, 1, 1); REGISTER_FUNCTION("RAND", "NUMBER_RAND", false, false, 0, 0); - // string functions - // misc functions + REGISTER_FUNCTION("FAIL", "FAIL", false, false, 0, 1); // FAIL is non-deterministic, otherwise query optimisation will fail! + REGISTER_FUNCTION("PASSTHRU", "PASSTHRU", false, false, 1, 1); // simple non-deterministic wrapper to avoid optimisations at parse time + REGISTER_FUNCTION("MERGE", "MERGE", true, false, 2, 256); REGISTER_FUNCTION("UNION", "UNION", true, false, 2, 256); REGISTER_FUNCTION("LENGTH", "LENGTH", true, true, 1, 1); diff --git a/Makefile.in b/Makefile.in index 6f0bca9d71..d38dfe68f5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,9 +1,9 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. +# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -158,11 +158,11 @@ CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru -AM_V_AR = $(am__v_AR_$(V)) -am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY)) +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libarango_a_AR = $(AR) $(ARFLAGS) libarango_a_LIBADD = @@ -434,27 +434,27 @@ am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_$(V)) -am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ -AM_V_CXXLD = $(am__v_CXXLD_$(V)) -am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libarango_a_SOURCES) $(UnitTests_basics_suite_SOURCES) \ $(UnitTests_geo_suite_SOURCES) $(arangod_SOURCES) \ @@ -485,6 +485,12 @@ am__nobase_list = $(am__nobase_strip_setup); \ am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } DATA = $(nobase_pkgdata_DATA) ETAGS = etags CTAGS = ctags @@ -492,12 +498,16 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -1046,6 +1056,7 @@ SHELL_SERVER_AHUACATL = @srcdir@/js/server/tests/ahuacatl-operators.js \ @srcdir@/js/server/tests/ahuacatl-functions.js \ @srcdir@/js/server/tests/ahuacatl-bind.js \ @srcdir@/js/server/tests/ahuacatl-ternary.js \ + @srcdir@/js/server/tests/ahuacatl-logical.js \ @srcdir@/js/server/tests/ahuacatl-parse.js \ @srcdir@/js/server/tests/ahuacatl-queries-simple.js \ @srcdir@/js/server/tests/ahuacatl-queries-variables.js \ @@ -1069,7 +1080,7 @@ all: $(BUILT_SOURCES) .SUFFIXES: .SUFFIXES: .c .cpp .o .obj -am--refresh: +am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.files $(srcdir)/Makefile.doxygen $(srcdir)/Makefile.javascript $(srcdir)/Makefile.unittests $(srcdir)/Makefile.flex $(srcdir)/Makefile.bison $(srcdir)/m4/Makefile.all-in-one-libev $(srcdir)/m4/Makefile.all-in-one-v8 $(srcdir)/m4/Makefile.all-in-one-mruby $(am__configure_deps) @for dep in $?; do \ @@ -1094,6 +1105,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; +$(srcdir)/Makefile.files $(srcdir)/Makefile.doxygen $(srcdir)/Makefile.javascript $(srcdir)/Makefile.unittests $(srcdir)/Makefile.flex $(srcdir)/Makefile.bison $(srcdir)/m4/Makefile.all-in-one-libev $(srcdir)/m4/Makefile.all-in-one-v8 $(srcdir)/m4/Makefile.all-in-one-mruby: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck @@ -1105,10 +1117,8 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): config/config.h: config/stamp-h1 - @if test ! -f $@; then \ - rm -f config/stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) config/stamp-h1; \ - else :; fi + @if test ! -f $@; then rm -f config/stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) config/stamp-h1; else :; fi config/stamp-h1: $(top_srcdir)/config/config.h.in $(top_builddir)/config.status @rm -f config/stamp-h1 @@ -1119,10 +1129,8 @@ $(top_srcdir)/config/config.h.in: $(am__configure_deps) touch $@ BasicsC/local-configuration.h: BasicsC/stamp-h2 - @if test ! -f $@; then \ - rm -f BasicsC/stamp-h2; \ - $(MAKE) $(AM_MAKEFLAGS) BasicsC/stamp-h2; \ - else :; fi + @if test ! -f $@; then rm -f BasicsC/stamp-h2; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) BasicsC/stamp-h2; else :; fi BasicsC/stamp-h2: $(top_srcdir)/BasicsC/local-configuration.h.in $(top_builddir)/config.status @rm -f BasicsC/stamp-h2 @@ -1426,7 +1434,7 @@ MRuby/MRLineEditor.$(OBJEXT): MRuby/$(am__dirstamp) \ MRuby/$(DEPDIR)/$(am__dirstamp) MRuby/mr-utils.$(OBJEXT): MRuby/$(am__dirstamp) \ MRuby/$(DEPDIR)/$(am__dirstamp) -libarango.a: $(libarango_a_OBJECTS) $(libarango_a_DEPENDENCIES) +libarango.a: $(libarango_a_OBJECTS) $(libarango_a_DEPENDENCIES) $(EXTRA_libarango_a_DEPENDENCIES) $(AM_V_at)-rm -f libarango.a $(AM_V_AR)$(libarango_a_AR) libarango.a $(libarango_a_OBJECTS) $(libarango_a_LIBADD) $(AM_V_at)$(RANLIB) libarango.a @@ -1560,7 +1568,7 @@ UnitTests/Jutland/StringBufferTest.$(OBJEXT): \ UnitTests/Jutland/StringUtilsTest.$(OBJEXT): \ UnitTests/Jutland/$(am__dirstamp) \ UnitTests/Jutland/$(DEPDIR)/$(am__dirstamp) -UnitTests/basics_suite$(EXEEXT): $(UnitTests_basics_suite_OBJECTS) $(UnitTests_basics_suite_DEPENDENCIES) UnitTests/$(am__dirstamp) +UnitTests/basics_suite$(EXEEXT): $(UnitTests_basics_suite_OBJECTS) $(UnitTests_basics_suite_DEPENDENCIES) $(EXTRA_UnitTests_basics_suite_DEPENDENCIES) UnitTests/$(am__dirstamp) @rm -f UnitTests/basics_suite$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(UnitTests_basics_suite_OBJECTS) $(UnitTests_basics_suite_LDADD) $(LIBS) UnitTests/Cambridge/$(am__dirstamp): @@ -1575,7 +1583,7 @@ UnitTests/Cambridge/Runner.$(OBJEXT): \ UnitTests/Cambridge/georeg.$(OBJEXT): \ UnitTests/Cambridge/$(am__dirstamp) \ UnitTests/Cambridge/$(DEPDIR)/$(am__dirstamp) -UnitTests/geo_suite$(EXEEXT): $(UnitTests_geo_suite_OBJECTS) $(UnitTests_geo_suite_DEPENDENCIES) UnitTests/$(am__dirstamp) +UnitTests/geo_suite$(EXEEXT): $(UnitTests_geo_suite_OBJECTS) $(UnitTests_geo_suite_DEPENDENCIES) $(EXTRA_UnitTests_geo_suite_DEPENDENCIES) UnitTests/$(am__dirstamp) @rm -f UnitTests/geo_suite$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(UnitTests_geo_suite_OBJECTS) $(UnitTests_geo_suite_LDADD) $(LIBS) Admin/$(am__dirstamp): @@ -1889,7 +1897,7 @@ VocBase/voc-shaper.$(OBJEXT): VocBase/$(am__dirstamp) \ VocBase/$(DEPDIR)/$(am__dirstamp) VocBase/vocbase.$(OBJEXT): VocBase/$(am__dirstamp) \ VocBase/$(DEPDIR)/$(am__dirstamp) -arangod$(EXEEXT): $(arangod_OBJECTS) $(arangod_DEPENDENCIES) +arangod$(EXEEXT): $(arangod_OBJECTS) $(arangod_DEPENDENCIES) $(EXTRA_arangod_DEPENDENCIES) @rm -f arangod$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(arangod_OBJECTS) $(arangod_LDADD) $(LIBS) SimpleHttpClient/$(am__dirstamp): @@ -1916,7 +1924,7 @@ V8Client/V8ClientConnection.$(OBJEXT): V8Client/$(am__dirstamp) \ V8Client/$(DEPDIR)/$(am__dirstamp) V8Client/arangoimp.$(OBJEXT): V8Client/$(am__dirstamp) \ V8Client/$(DEPDIR)/$(am__dirstamp) -arangoimp$(EXEEXT): $(arangoimp_OBJECTS) $(arangoimp_DEPENDENCIES) +arangoimp$(EXEEXT): $(arangoimp_OBJECTS) $(arangoimp_DEPENDENCIES) $(EXTRA_arangoimp_DEPENDENCIES) @rm -f arangoimp$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(arangoimp_OBJECTS) $(arangoimp_LDADD) $(LIBS) MRClient/$(am__dirstamp): @@ -1927,12 +1935,12 @@ MRClient/$(DEPDIR)/$(am__dirstamp): @: > MRClient/$(DEPDIR)/$(am__dirstamp) MRClient/arangoirb.$(OBJEXT): MRClient/$(am__dirstamp) \ MRClient/$(DEPDIR)/$(am__dirstamp) -arangoirb$(EXEEXT): $(arangoirb_OBJECTS) $(arangoirb_DEPENDENCIES) +arangoirb$(EXEEXT): $(arangoirb_OBJECTS) $(arangoirb_DEPENDENCIES) $(EXTRA_arangoirb_DEPENDENCIES) @rm -f arangoirb$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(arangoirb_OBJECTS) $(arangoirb_LDADD) $(LIBS) V8Client/arangosh.$(OBJEXT): V8Client/$(am__dirstamp) \ V8Client/$(DEPDIR)/$(am__dirstamp) -arangosh$(EXEEXT): $(arangosh_OBJECTS) $(arangosh_DEPENDENCIES) +arangosh$(EXEEXT): $(arangosh_OBJECTS) $(arangosh_DEPENDENCIES) $(EXTRA_arangosh_DEPENDENCIES) @rm -f arangosh$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(arangosh_OBJECTS) $(arangosh_LDADD) $(LIBS) @@ -2401,37 +2409,33 @@ distclean-compile: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-nobase_pkgdataDATA: $(nobase_pkgdata_DATA) @$(NORMAL_INSTALL) test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" @@ -2452,9 +2456,7 @@ uninstall-nobase_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(nobase_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgdatadir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgdatadir)" && rm -f $$files + dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -2552,7 +2554,11 @@ dist-gzip: distdir $(am__remove_distdir) dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir @@ -2560,7 +2566,7 @@ dist-lzma: distdir $(am__remove_distdir) dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir @@ -2591,6 +2597,8 @@ distcheck: dist bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ @@ -2610,6 +2618,7 @@ distcheck: dist && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ @@ -2638,8 +2647,16 @@ distcheck: dist list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ @@ -2674,10 +2691,15 @@ install-am: all-am installcheck: installcheck-am install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: clean-generic: @@ -2843,8 +2865,8 @@ uninstall-am: uninstall-binPROGRAMS uninstall-nobase_pkgdataDATA \ .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ clean-binPROGRAMS clean-generic clean-local \ clean-noinstLIBRARIES clean-noinstPROGRAMS clean-sbinPROGRAMS \ - ctags dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \ - dist-tarZ dist-xz dist-zip distcheck distclean \ + ctags dist dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ diff --git a/js/server/ahuacatl.js b/js/server/ahuacatl.js index f46de4df42..e2ee92b339 100644 --- a/js/server/ahuacatl.js +++ b/js/server/ahuacatl.js @@ -1514,6 +1514,19 @@ function AHUACATL_LIMIT (value, offset, count) { return value.slice(offset, offset + count); } +//////////////////////////////////////////////////////////////////////////////// +/// @} +//////////////////////////////////////////////////////////////////////////////// + +// ----------------------------------------------------------------------------- +// --SECTION-- list processing functions +// ----------------------------------------------------------------------------- + +//////////////////////////////////////////////////////////////////////////////// +/// @addtogroup Ahuacatl +/// @{ +//////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// /// @brief get the length of a list //////////////////////////////////////////////////////////////////////////////// @@ -1664,3 +1677,46 @@ function AHUACATL_SUM () { /// @} //////////////////////////////////////////////////////////////////////////////// +// ----------------------------------------------------------------------------- +// --SECTION-- misc functions +// ----------------------------------------------------------------------------- + +//////////////////////////////////////////////////////////////////////////////// +/// @addtogroup Ahuacatl +/// @{ +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +/// @brief passthru the argument +/// +/// this function is marked as non-deterministic so its argument withstands +/// query optimisation. this function can be used for testing +//////////////////////////////////////////////////////////////////////////////// + +function AHUACATL_PASSTHRU () { + var value = arguments[0]; + + return value; +} + +//////////////////////////////////////////////////////////////////////////////// +/// @brief always fail +/// +/// this function is non-deterministic so it is not executed at query +/// optimisation time. this function can be used for testing +//////////////////////////////////////////////////////////////////////////////// + +function AHUACATL_FAIL () { + var message = arguments[0]; + + if (AHUACATL_TYPEWEIGHT(message) === AHUACATL_TYPEWEIGHT_STRING) { + throw "FAIL() called with argument '" + message + "'"; + } + + throw "FAIL() called"; +} + +//////////////////////////////////////////////////////////////////////////////// +/// @} +//////////////////////////////////////////////////////////////////////////////// + diff --git a/js/server/js-ahuacatl.h b/js/server/js-ahuacatl.h index aeb782b5eb..64d8dab672 100644 --- a/js/server/js-ahuacatl.h +++ b/js/server/js-ahuacatl.h @@ -1516,6 +1516,19 @@ static string JS_server_ahuacatl = "}\n" "\n" "////////////////////////////////////////////////////////////////////////////////\n" + "/// @}\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "\n" + "// -----------------------------------------------------------------------------\n" + "// --SECTION-- list processing functions\n" + "// -----------------------------------------------------------------------------\n" + "\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "/// @addtogroup Ahuacatl\n" + "/// @{\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "\n" + "////////////////////////////////////////////////////////////////////////////////\n" "/// @brief get the length of a list\n" "////////////////////////////////////////////////////////////////////////////////\n" "\n" @@ -1665,4 +1678,47 @@ static string JS_server_ahuacatl = "/// @}\n" "////////////////////////////////////////////////////////////////////////////////\n" "\n" + "// -----------------------------------------------------------------------------\n" + "// --SECTION-- misc functions\n" + "// -----------------------------------------------------------------------------\n" + "\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "/// @addtogroup Ahuacatl\n" + "/// @{\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "/// @brief passthru the argument\n" + "///\n" + "/// this function is marked as non-deterministic so its argument withstands\n" + "/// query optimisation. this function can be used for testing\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "\n" + "function AHUACATL_PASSTHRU () {\n" + " var value = arguments[0];\n" + "\n" + " return value;\n" + "}\n" + "\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "/// @brief always fail\n" + "///\n" + "/// this function is non-deterministic so it is not executed at query \n" + "/// optimisation time. this function can be used for testing\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "\n" + "function AHUACATL_FAIL () {\n" + " var message = arguments[0];\n" + "\n" + " if (AHUACATL_TYPEWEIGHT(message) === AHUACATL_TYPEWEIGHT_STRING) {\n" + " throw \"FAIL() called with argument '\" + message + \"'\";\n" + " }\n" + "\n" + " throw \"FAIL() called\";\n" + "}\n" + "\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "/// @}\n" + "////////////////////////////////////////////////////////////////////////////////\n" + "\n" ; diff --git a/js/server/tests/ahuacatl-logical.js b/js/server/tests/ahuacatl-logical.js index 1dcce9a394..b0e91d5366 100644 --- a/js/server/tests/ahuacatl-logical.js +++ b/js/server/tests/ahuacatl-logical.js @@ -32,8 +32,9 @@ var jsunity = require("jsunity"); //////////////////////////////////////////////////////////////////////////////// function ahuacatlLogicalTestSuite () { + var errors = internal.errors; - //////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// /// @brief execute a given query //////////////////////////////////////////////////////////////////////////////// @@ -60,6 +61,14 @@ function ahuacatlLogicalTestSuite () { return results; } +//////////////////////////////////////////////////////////////////////////////// +/// @brief return the error code from a result +//////////////////////////////////////////////////////////////////////////////// + + function getErrorCode (result) { + return result.errorNum; + } + return { @@ -152,12 +161,12 @@ function ahuacatlLogicalTestSuite () { //////////////////////////////////////////////////////////////////////////////// testUnaryNotInvalid : function () { - assertException(function() { getQueryResults("RETURN !null"); }); - assertException(function() { getQueryResults("RETURN !0"); }); - assertException(function() { getQueryResults("RETURN !1"); }); - assertException(function() { getQueryResults("RETURN !\"value\""); }); - assertException(function() { getQueryResults("RETURN ![ ]"); }); - assertException(function() { getQueryResults("RETURN !{ }"); }); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN !null"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN !0"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN !1"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN !\"value\""))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN ![]"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN !{}"))); }, //////////////////////////////////////////////////////////////////////////////// @@ -166,10 +175,10 @@ function ahuacatlLogicalTestSuite () { testUnaryNotPrecedence : function () { // not has higher precedence than == - assertException(function() { getQueryResults("RETURN !1 == 0"); }); - assertException(function() { getQueryResults("RETURN !1 == !1"); }); - assertException(function() { getQueryResults("RETURN !1 > 7"); }); - assertException(function() { getQueryResults("RETURN !1 in [1]"); }); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN !1 == 0"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN !1 == !1"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN !1 > 7"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN !1 IN [1]"))); }, //////////////////////////////////////////////////////////////////////////////// @@ -227,12 +236,12 @@ function ahuacatlLogicalTestSuite () { //////////////////////////////////////////////////////////////////////////////// testUnaryPlusInvalid : function () { - assertException(function() { getQueryResults("RETURN +null"); }); - assertException(function() { getQueryResults("RETURN +true"); }); - assertException(function() { getQueryResults("RETURN +false"); }); - assertException(function() { getQueryResults("RETURN +\"value\""); }); - assertException(function() { getQueryResults("RETURN +[ ]"); }); - assertException(function() { getQueryResults("RETURN +{ }"); }); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN +null"))); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN +true"))); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN +false"))); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN +\"value\""))); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN +[ ]"))); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN +{ }"))); }, //////////////////////////////////////////////////////////////////////////////// @@ -290,12 +299,12 @@ function ahuacatlLogicalTestSuite () { //////////////////////////////////////////////////////////////////////////////// testUnaryMinusInvalid : function () { - assertException(function() { getQueryResults("RETURN -null"); }); - assertException(function() { getQueryResults("RETURN -true"); }); - assertException(function() { getQueryResults("RETURN -false"); }); - assertException(function() { getQueryResults("RETURN -\"value\""); }); - assertException(function() { getQueryResults("RETURN -[ ]"); }); - assertException(function() { getQueryResults("RETURN -{ }"); }); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN -null"))); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN -true"))); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN -false"))); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN -\"value\""))); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN -[ ]"))); + assertEqual(errors.ERROR_QUERY_INVALID_ARITHMETIC_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN -{ }"))); }, //////////////////////////////////////////////////////////////////////////////// @@ -328,6 +337,230 @@ function ahuacatlLogicalTestSuite () { var actual = getQueryResults("RETURN -5 == -10--5"); assertEqual(expected, actual); }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary and +//////////////////////////////////////////////////////////////////////////////// + + testBinaryAnd1 : function () { + var expected = [ true ]; + var actual = getQueryResults("RETURN true && true"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary and +//////////////////////////////////////////////////////////////////////////////// + + testBinaryAnd2 : function () { + var expected = [ false ]; + var actual = getQueryResults("RETURN true && false"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary and +//////////////////////////////////////////////////////////////////////////////// + + testBinaryAnd3 : function () { + var expected = [ false ]; + var actual = getQueryResults("RETURN false && true"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary and +//////////////////////////////////////////////////////////////////////////////// + + testBinaryAnd4 : function () { + var expected = [ false ]; + var actual = getQueryResults("RETURN false && false"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary and +//////////////////////////////////////////////////////////////////////////////// + + testBinaryAnd5 : function () { + var expected = [ true ]; + var actual = getQueryResults("RETURN true && !false"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary and +//////////////////////////////////////////////////////////////////////////////// + + testBinaryAndInvalid : function () { + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN null && true"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN 1 && true"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN \"\" && true"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN \"false\" && true"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN [ ] && true"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN { } && true"))); + + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true && null"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true && 1"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true && \"\""))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true && \"false\""))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true && [ ]"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true && { }"))); + + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN null && false"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN 1 && false"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN \"\" && false"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN \"false\" && false"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN [ ] && false"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN { } && false"))); + + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false && null"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false && 1"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false && \"\""))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false && \"false\""))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false && [ ]"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false && { }"))); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary and, short circuit evaluation +//////////////////////////////////////////////////////////////////////////////// + + testBinaryAndShortCircuit1 : function () { + // TODO: FIXME + // var expected = [ false ]; + // var actual = getQueryResults("RETURN false && FAIL('this will fail')"); + //assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary and, short circuit evaluation +//////////////////////////////////////////////////////////////////////////////// + + testBinaryAndShortCircuit2 : function () { + assertException(function() { getQueryResults("RETURN false && FAIL('this will fail')"); }); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary or +//////////////////////////////////////////////////////////////////////////////// + + testBinaryOr1 : function () { + var expected = [ true ]; + var actual = getQueryResults("RETURN true || true"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary or +//////////////////////////////////////////////////////////////////////////////// + + testBinaryOr2 : function () { + var expected = [ true ]; + var actual = getQueryResults("RETURN true || false"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary or +//////////////////////////////////////////////////////////////////////////////// + + testBinaryOr3 : function () { + var expected = [ true ]; + var actual = getQueryResults("RETURN false || true"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary or +//////////////////////////////////////////////////////////////////////////////// + + testBinaryOr4 : function () { + var expected = [ false ]; + var actual = getQueryResults("RETURN false || false"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary or +//////////////////////////////////////////////////////////////////////////////// + + testBinaryOr5 : function () { + var expected = [ true ]; + var actual = getQueryResults("RETURN true || !false"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary or +//////////////////////////////////////////////////////////////////////////////// + + testBinaryOr6 : function () { + var expected = [ true ]; + var actual = getQueryResults("RETURN false || !false"); + assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary or +//////////////////////////////////////////////////////////////////////////////// + + testBinaryOrInvalid : function () { + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN null || true"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN 1 || true"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN \"\" || true"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN \"false\" || true"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN [ ] || true"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN { } || true"))); + + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true || null"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true || 1"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true || \"\""))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true || \"false\""))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true || [ ]"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN true || { }"))); + + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN null || false"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN 1 || false"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN \"\" || false"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN \"false\" || false"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN [ ] || false"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN { } || false"))); + + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false || null"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false || 1"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false || \"\""))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false || \"false\""))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false || [ ]"))); + assertEqual(errors.ERROR_QUERY_INVALID_LOGICAL_VALUE.code, getErrorCode(AHUACATL_RUN("RETURN false || { }"))); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary or, short circuit evaluation +//////////////////////////////////////////////////////////////////////////////// + + testBinaryOrShortCircuit1 : function () { + // TODO: FIXME + // var expected = [ true ]; + // var actual = getQueryResults("RETURN true || FAIL('this will fail')"); + //assertEqual(expected, actual); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary or, short circuit evaluation +//////////////////////////////////////////////////////////////////////////////// + + testBinaryOrShortCircuit2 : function () { + assertException(function() { getQueryResults("RETURN false || FAIL('this will fail')"); }); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test binary or, short circuit evaluation +//////////////////////////////////////////////////////////////////////////////// + + testBinaryOrShortCircuit3 : function () { + assertException(function() { getQueryResults("RETURN FAIL('this will fail') || true"); }); + }, }; }