static TRI_string_buffer_t* RelationCode (const char* const name, const TRI_aql_node_t* const lhs, const TRI_aql_node_t* const rhs) { TRI_string_buffer_t* buffer = TRI_CreateStringBuffer(TRI_UNKNOWN_MEM_ZONE); if (!lhs || !rhs) { return NULL; } if (TRI_AppendStringStringBuffer(buffer, "(function(){return AHUACATL_RELATIONAL_") != TRI_ERROR_NO_ERROR) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } if (TRI_AppendStringStringBuffer(buffer, name) != TRI_ERROR_NO_ERROR) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } if (TRI_AppendStringStringBuffer(buffer, "(") != TRI_ERROR_NO_ERROR) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } if (!TRI_NodeJavascriptAql(buffer, lhs)) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } if (TRI_AppendCharStringBuffer(buffer, ',') != TRI_ERROR_NO_ERROR) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } if (!TRI_NodeJavascriptAql(buffer, rhs)) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } if (TRI_AppendStringStringBuffer(buffer, ");})") != TRI_ERROR_NO_ERROR) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } return buffer; }
static TRI_string_buffer_t* FcallCode (const char* const name, const TRI_aql_node_t* const args) { TRI_string_buffer_t* buffer = TRI_CreateStringBuffer(TRI_UNKNOWN_MEM_ZONE); size_t i; size_t n; if (!buffer) { return NULL; } if (TRI_AppendStringStringBuffer(buffer, "(function(){return AHUACATL_FCALL(") != TRI_ERROR_NO_ERROR) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } if (TRI_AppendStringStringBuffer(buffer, name) != TRI_ERROR_NO_ERROR) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } if (TRI_AppendStringStringBuffer(buffer, ",[") != TRI_ERROR_NO_ERROR) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } n = args->_members._length; for (i = 0; i < n; ++i) { TRI_aql_node_t* arg = (TRI_aql_node_t*) args->_members._buffer[i]; if (i > 0) { if (TRI_AppendCharStringBuffer(buffer, ',') != TRI_ERROR_NO_ERROR) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } } if (!TRI_NodeJavascriptAql(buffer, arg)) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } } if (TRI_AppendStringStringBuffer(buffer, "]);})") != TRI_ERROR_NO_ERROR) { TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, buffer); return NULL; } return buffer; }
bool TRI_NodeJavascriptAql (TRI_string_buffer_t* const buffer, const TRI_aql_node_t* const node) { switch (node->_type) { case TRI_AQL_NODE_VALUE: return TRI_ValueJavascriptAql(buffer, &node->_value, node->_value._type); case TRI_AQL_NODE_ARRAY_ELEMENT: if (! TRI_ValueJavascriptAql(buffer, &node->_value, TRI_AQL_TYPE_STRING)) { return false; } if (TRI_AppendCharStringBuffer(buffer, ':') != TRI_ERROR_NO_ERROR) { return false; } return TRI_NodeJavascriptAql(buffer, TRI_AQL_NODE_MEMBER(node, 0)); case TRI_AQL_NODE_LIST: if (TRI_AppendCharStringBuffer(buffer, '[') != TRI_ERROR_NO_ERROR) { return false; } if (! AppendListValues(buffer, node, &TRI_NodeJavascriptAql)) { return false; } return (TRI_AppendCharStringBuffer(buffer, ']') == TRI_ERROR_NO_ERROR); case TRI_AQL_NODE_ARRAY: if (TRI_AppendCharStringBuffer(buffer, '{') != TRI_ERROR_NO_ERROR) { return false; } if (! AppendListValues(buffer, node, &TRI_NodeJavascriptAql)) { return false; } return (TRI_AppendCharStringBuffer(buffer, '}') == TRI_ERROR_NO_ERROR); default: return false; } }