Skip to content

Commit

Permalink
Merge branch 'devel' of github.com:triAGENS/ArangoDB
Browse files Browse the repository at this point in the history
Conflicts:
	.gitignore
	Ahuacatl/ahuacatl-codegen.h
  • Loading branch information
fceller committed Jun 2, 2012
2 parents 5f7ed38 + d8c7d87 commit d503b6e
Show file tree
Hide file tree
Showing 38 changed files with 1,462 additions and 596 deletions.
119 changes: 57 additions & 62 deletions .gitignore
@@ -1,62 +1,89 @@
*.Po
*.gcda
*.gcno
*.la
*.lo
*.o
*.old
*.pyc
*.swp
*~
.DS_Store
.deps
.dirstamp
.libev-build-*
.libs
.mruby-build-*
.setup-js-directories
.setup-mr-directories
.svn
.v8-build-*
/nbproject/private/
3rdParty/libev/ARCH.x64
3rdParty/libev/libtool
3rdParty/mruby/bin/mrbc
3rdParty/mruby/bin/mruby
3rdParty/mruby/bin/mrubysample
3rdParty/mruby/GIT
3rdParty/mruby/GPATH
3rdParty/mruby/GRTAGS
3rdParty/mruby/GTAGS
3rdParty/mruby/bin/mrbc
3rdParty/mruby/bin/mruby
3rdParty/mruby/bin/mrubysample
3rdParty/mruby/lib/ritevm.a
3rdParty/mruby/mrblib/mrblib.c
3rdParty/mruby/mrblib/mrblib.ctmp
3rdParty/mruby/mrblib/mrblib.rbtmp
3rdParty/ptmalloc3/libptmalloc3.a
3rdParty/ptmalloc3/tst-independent-alloc
3rdParty/ptmalloc3/t-test1
3rdParty/ptmalloc3/t-test2
3rdParty/ptmalloc3/tst-independent-alloc
ARCH.*
autom4te.cache
arango
arangodb
avocimp
avocirb
avocsh
Ahuacatl/ahuacatl-grammar.output
BasicsC/local-configuration.h
build.h
build.info
commit.sh
config/config.h
config/config.guess
config/config.sub
config.h
config.log
config/revision.sh
config.status
config/version.sh
COVERAGE
.deps
.dirstamp
Doxygen/.setup-directories
Doxygen/arango.doxy
Doxygen/html/
Doxygen/js
Doxygen/latex/
Doxygen/web/*.html
Doxygen/wiki/
Doxygen/xml/
.DS_Store
*.gcda
*.gcno
GPATH
GRTAGS
GTAGS
JsonParserX/JsonParserX.output
*.la
Makefile
Makefile.local
QL/parser.output
UnitTests/HttpInterface/logs
UnitTests/Jutland/CsvReaderTest.cpp
UnitTests/Jutland/Makefile.am
UnitTests/Jutland/Makefile.py
UnitTests/Jutland/Runner.cpp
UnitTests/Philadelphia/Makefile.am
UnitTests/Philadelphia/Makefile.py
UnitTests/Philadelphia/Runner.cpp
UnitTests/basics_suite
UnitTests/geo_suite
VC++
arangod
arangoimp
arangoirb
arangosh
autom4te.cache
build.h
build.info
commit.sh
config.h
config.log
config.status
config/config.guess
config/config.h
config/config.sub
config/revision.sh
config/version.sh
libarango.a
libarangodb.a
.libev-build-*
.libs
*.lo
m4/component.engine
m4/component.files
m4/component.storage
Expand All @@ -74,38 +101,6 @@ m4/configure.standard
m4/configure.tex
m4/external.boost-test
m4/external.libxml2
Makefile
Makefile.local
.mruby-build-*
*.o
*.old
out
*.Po
*.pyc
QL/parser.output
.setup-js-directories
.setup-mr-directories
stamp-h*
.svn
*.swp
tags
Ahuacatl/ahuacatl-grammar.output
UnitTests/HttpInterface/logs
UnitTests/Jutland/CsvReaderTest.cpp
UnitTests/Jutland/Makefile.am
UnitTests/Jutland/Makefile.py
UnitTests/Jutland/Runner.cpp
UnitTests/Philadelphia/Makefile.am
UnitTests/Philadelphia/Makefile.py
UnitTests/Philadelphia/Runner.cpp
UnitTests/basics_suite
.v8-build-*
VC++
/nbproject/private/
UnitTests/geo_suite
Doxygen/web/*.html
arangod
arangosh
arangoimp
arangoirb
Doxygen/.setup-directories
1 change: 1 addition & 0 deletions Ahuacatl/ahuacatl-access-optimiser.c
Expand Up @@ -2025,6 +2025,7 @@ TRI_vector_pointer_t* TRI_AddAccessAql (TRI_aql_context_t* const context,
// candidate is preferred

// free existing field access
assert(existing);
TRI_FreeAccessAql(existing);
copy = TRI_CloneAccessAql(context, candidate);
if (!copy) {
Expand Down
36 changes: 21 additions & 15 deletions Ahuacatl/ahuacatl-ast-node.c
Expand Up @@ -29,6 +29,8 @@
#include "Ahuacatl/ahuacatl-collections.h"
#include "Ahuacatl/ahuacatl-functions.h"
#include "Ahuacatl/ahuacatl-parser-functions.h"
#include "Ahuacatl/ahuacatl-scope.h"
#include "Ahuacatl/ahuacatl-variable.h"

// -----------------------------------------------------------------------------
// --SECTION-- private macros
Expand Down Expand Up @@ -220,6 +222,7 @@ TRI_aql_node_t* TRI_CreateNodeForAql (TRI_aql_context_t* const context,
const char* const name,
const TRI_aql_node_t* const expression) {
CREATE_NODE(AQL_NODE_FOR)
node->_value._value._data = NULL;

if (!name) {
ABORT_OOM
Expand All @@ -231,13 +234,11 @@ TRI_aql_node_t* TRI_CreateNodeForAql (TRI_aql_context_t* const context,
}

{
TRI_aql_node_t* variable = TRI_CreateNodeVariableAql(context, name);
TRI_aql_node_t* variable = TRI_CreateNodeVariableAql(context, name, node);
ADD_MEMBER(variable)
ADD_MEMBER(expression)
}

TRI_AQL_NODE_DATA(node) = NULL;


return node;
}

Expand All @@ -260,7 +261,7 @@ TRI_aql_node_t* TRI_CreateNodeLetAql (TRI_aql_context_t* const context,
}

{
TRI_aql_node_t* variable = TRI_CreateNodeVariableAql(context, name);
TRI_aql_node_t* variable = TRI_CreateNodeVariableAql(context, name, node);
ADD_MEMBER(variable)
ADD_MEMBER(expression)
}
Expand Down Expand Up @@ -305,7 +306,7 @@ TRI_aql_node_t* TRI_CreateNodeCollectAql (TRI_aql_context_t* const context,

ADD_MEMBER(list)
if (name) {
TRI_aql_node_t* variable = TRI_CreateNodeVariableAql(context, name);
TRI_aql_node_t* variable = TRI_CreateNodeVariableAql(context, name, node);
ADD_MEMBER(variable)
}

Expand Down Expand Up @@ -365,7 +366,7 @@ TRI_aql_node_t* TRI_CreateNodeAssignAql (TRI_aql_context_t* const context,
CREATE_NODE(AQL_NODE_ASSIGN)

{
TRI_aql_node_t* variable = TRI_CreateNodeVariableAql(context, name);
TRI_aql_node_t* variable = TRI_CreateNodeVariableAql(context, name, node);
ADD_MEMBER(variable)
ADD_MEMBER(expression)
}
Expand All @@ -378,14 +379,15 @@ TRI_aql_node_t* TRI_CreateNodeAssignAql (TRI_aql_context_t* const context,
////////////////////////////////////////////////////////////////////////////////

TRI_aql_node_t* TRI_CreateNodeVariableAql (TRI_aql_context_t* const context,
const char* const name) {
const char* const name,
TRI_aql_node_t* const definingNode) {
CREATE_NODE(AQL_NODE_VARIABLE)

if (!name) {
ABORT_OOM
}

if (!TRI_AddVariableContextAql(context, name)) {
if (!TRI_AddVariableScopeAql(context, name, definingNode)) {
// duplicate variable name
TRI_SetErrorContextAql(context, TRI_ERROR_QUERY_VARIABLE_REDECLARED, name);
return NULL;
Expand All @@ -412,9 +414,12 @@ TRI_aql_node_t* TRI_CreateNodeCollectionAql (TRI_aql_context_t* const context,
TRI_SetErrorContextAql(context, TRI_ERROR_QUERY_COLLECTION_NOT_FOUND, name);
return NULL;
}

TRI_AQL_NODE_STRING(node) = (char*) name;

{
TRI_aql_node_t* nameNode = TRI_CreateNodeValueStringAql(context, name);
ADD_MEMBER(nameNode)
}

if (!TRI_AddCollectionAql(context, name)) {
return NULL;
}
Expand Down Expand Up @@ -469,7 +474,7 @@ TRI_aql_node_t* TRI_CreateNodeParameterAql (TRI_aql_context_t* const context,
}

// save name of bind parameter for later
TRI_InsertKeyAssociativePointer(&context->_parameterNames, name, (void*) name, true);
TRI_InsertKeyAssociativePointer(&context->_parameters._names, name, (void*) name, true);

TRI_AQL_NODE_STRING(node) = (char*) name;

Expand Down Expand Up @@ -752,7 +757,7 @@ TRI_aql_node_t* TRI_CreateNodeSubqueryAql (TRI_aql_context_t* const context,

{
// add the temporary variable
TRI_aql_node_t* variable = TRI_CreateNodeVariableAql(context, TRI_GetNameParseAql(context));
TRI_aql_node_t* variable = TRI_CreateNodeVariableAql(context, TRI_GetNameParseAql(context), node);
ADD_MEMBER(variable)
}

Expand Down Expand Up @@ -811,8 +816,9 @@ TRI_aql_node_t* TRI_CreateNodeExpandAql (TRI_aql_context_t* const context,
}

{
TRI_aql_node_t* variable1 = TRI_CreateNodeVariableAql(context, varname);
TRI_aql_node_t* variable2 = TRI_CreateNodeVariableAql(context, TRI_GetNameParseAql(context));
// TODO: check if 3rd parameters' values are correct for these
TRI_aql_node_t* variable1 = TRI_CreateNodeVariableAql(context, varname, node);
TRI_aql_node_t* variable2 = TRI_CreateNodeVariableAql(context, TRI_GetNameParseAql(context), node);

ADD_MEMBER(variable1)
ADD_MEMBER(variable2)
Expand Down
3 changes: 2 additions & 1 deletion Ahuacatl/ahuacatl-ast-node.h
Expand Up @@ -337,7 +337,8 @@ TRI_aql_node_t* TRI_CreateNodeParameterAql (TRI_aql_context_t* const,
////////////////////////////////////////////////////////////////////////////////

TRI_aql_node_t* TRI_CreateNodeVariableAql (TRI_aql_context_t* const,
const char* const);
const char* const,
TRI_aql_node_t* const);

////////////////////////////////////////////////////////////////////////////////
/// @brief create an AST collection node
Expand Down
22 changes: 11 additions & 11 deletions Ahuacatl/ahuacatl-bind-parameter.c
Expand Up @@ -56,7 +56,7 @@ static TRI_aql_node_t* ModifyNode (void* data,
context = (TRI_aql_context_t*) data;
assert(context);

bindValues = (TRI_associative_pointer_t*) &context->_parameterValues;
bindValues = (TRI_associative_pointer_t*) &context->_parameters._values;
assert(bindValues);

name = TRI_AQL_NODE_STRING(node);
Expand Down Expand Up @@ -164,11 +164,11 @@ void TRI_FreeBindParametersAql (TRI_aql_context_t* const context) {
size_t n;

// iterate thru all parameters allocated
n = context->_parameterValues._nrAlloc;
n = context->_parameters._values._nrAlloc;
for (i = 0; i < n; ++i) {
TRI_aql_bind_parameter_t* parameter;

parameter = (TRI_aql_bind_parameter_t*) context->_parameterValues._table[i];
parameter = (TRI_aql_bind_parameter_t*) context->_parameters._values._table[i];

if (!parameter) {
continue;
Expand Down Expand Up @@ -226,7 +226,7 @@ bool TRI_AddParameterValuesAql (TRI_aql_context_t* const context,
return false;
}

TRI_InsertKeyAssociativePointer(&context->_parameterValues, parameter->_name, parameter, false);
TRI_InsertKeyAssociativePointer(&context->_parameters._values, parameter->_name, parameter, false);
}

return true;
Expand All @@ -241,34 +241,34 @@ bool TRI_ValidateBindParametersAql (TRI_aql_context_t* const context) {
size_t n;

// iterate thru all parameter names used in the query
n = context->_parameterNames._nrAlloc;
n = context->_parameters._names._nrAlloc;
for (i = 0; i < n; ++i) {
char* name = (char*) context->_parameterNames._table[i];
char* name = (char*) context->_parameters._names._table[i];

if (!name) {
continue;
}

if (!TRI_LookupByKeyAssociativePointer(&context->_parameterValues, name)) {
if (!TRI_LookupByKeyAssociativePointer(&context->_parameters._values, name)) {
TRI_SetErrorContextAql(context, TRI_ERROR_QUERY_BIND_PARAMETER_MISSING, name);
return false;
}
}

// iterate thru all parameters that we have values for
n = context->_parameterValues._nrAlloc;
n = context->_parameters._values._nrAlloc;
for (i = 0; i < n; ++i) {
TRI_aql_bind_parameter_t* parameter;

parameter = (TRI_aql_bind_parameter_t*) context->_parameterValues._table[i];
parameter = (TRI_aql_bind_parameter_t*) context->_parameters._values._table[i];

if (!parameter) {
continue;
}

assert(parameter->_name);

if (!TRI_LookupByKeyAssociativePointer(&context->_parameterNames, parameter->_name)) {
if (!TRI_LookupByKeyAssociativePointer(&context->_parameters._names, parameter->_name)) {
TRI_SetErrorContextAql(context, TRI_ERROR_QUERY_BIND_PARAMETER_UNDECLARED, parameter->_name);
return false;
}
Expand All @@ -288,7 +288,7 @@ bool TRI_InjectBindParametersAql (TRI_aql_context_t* const context,
assert(context);
assert(context->_first);

if (TRI_GetLengthAssociativePointer(&context->_parameterNames) == 0) {
if (TRI_GetLengthAssociativePointer(&context->_parameters._names) == 0) {
// no bind parameters used in query, instantly return
return true;
}
Expand Down

0 comments on commit d503b6e

Please sign in to comment.