Skip to content

Commit 7d8e21b

Browse files
Feature/add mis endpoints in query (#696)
1 parent 834d0dc commit 7d8e21b

File tree

6 files changed

+1664
-1
lines changed

6 files changed

+1664
-1
lines changed

v2/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## [master](https://github.com/arangodb/go-driver/tree/master) (N/A)
44
- Add tasks endpoints to v2
55
- Add missing endpoints from collections to v2
6+
- Add missing endpoints from query to v2
67

78
## [2.1.3](https://github.com/arangodb/go-driver/tree/v2.1.3) (2025-02-21)
89
- Switch to Go 1.22.11

v2/arangodb/database_query.go

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,81 @@ type DatabaseQuery interface {
4343

4444
// ExplainQuery explains an AQL query and return information about it.
4545
ExplainQuery(ctx context.Context, query string, bindVars map[string]interface{}, opts *ExplainQueryOptions) (ExplainQueryResult, error)
46+
47+
// GetQueryProperties returns the properties of the query system.
48+
GetQueryProperties(ctx context.Context) (QueryProperties, error)
49+
50+
// UpdateQueryProperties updates the properties of the query system.
51+
// The properties are updated with the provided options.
52+
// The updated properties are returned.
53+
UpdateQueryProperties(ctx context.Context, options QueryProperties) (QueryProperties, error)
54+
55+
// ListOfRunningAQLQueries returns a list of currently running AQL queries.
56+
// If the all parameter is set to true, it returns all queries, otherwise only the queries that are currently running.
57+
// The result is a list of RunningAQLQuery objects.
58+
ListOfRunningAQLQueries(ctx context.Context, all *bool) ([]RunningAQLQuery, error)
59+
60+
// ListOfSlowAQLQueries returns a list of slow AQL queries.
61+
// If the all parameter is set to true, it returns all slow queries, otherwise only the queries that are currently running.
62+
// The result is a list of RunningAQLQuery objects.
63+
// Slow queries are defined as queries that have been running longer than the configured slow query threshold.
64+
// The slow query threshold can be configured in the query properties.
65+
// The result is a list of RunningAQLQuery objects.
66+
ListOfSlowAQLQueries(ctx context.Context, all *bool) ([]RunningAQLQuery, error)
67+
68+
// ClearSlowAQLQueries clears the list of slow AQL queries.
69+
// If the all parameter is set to true, it clears all slow queries, otherwise only
70+
// the queries that are currently running.
71+
ClearSlowAQLQueries(ctx context.Context, all *bool) error
72+
73+
// KillAQLQuery kills a running AQL query.
74+
// The queryId is the unique identifier of the query
75+
KillAQLQuery(ctx context.Context, queryId string, all *bool) error
76+
77+
// GetAllOptimizerRules returns all optimizer rules available in the database.
78+
// The result is a list of OptimizerRule objects.
79+
GetAllOptimizerRules(ctx context.Context) ([]OptimizerRules, error)
80+
81+
// GetQueryPlanCache returns a list of cached query plans.
82+
// The result is a list of QueryPlanCacheRespObject objects.
83+
GetQueryPlanCache(ctx context.Context) ([]QueryPlanCacheRespObject, error)
84+
85+
// ClearQueryPlanCache clears the query plan cache.
86+
ClearQueryPlanCache(ctx context.Context) error
87+
88+
// GetQueryEntriesCache returns a list of cached query entries.
89+
// The result is a list of QueryCacheEntriesRespObject objects.
90+
GetQueryEntriesCache(ctx context.Context) ([]QueryCacheEntriesRespObject, error)
91+
92+
// ClearQueryCache clears the query cache.
93+
// This will remove all cached query entries.
94+
ClearQueryCache(ctx context.Context) error
95+
96+
// GetQueryCacheProperties returns the properties of the query cache.
97+
// The result is a QueryCacheProperties object.
98+
GetQueryCacheProperties(ctx context.Context) (QueryCacheProperties, error)
99+
100+
// SetQueryCacheProperties sets the properties of the query cache.
101+
// The properties are updated with the provided options.
102+
SetQueryCacheProperties(ctx context.Context, options QueryCacheProperties) (QueryCacheProperties, error)
103+
104+
// CreateUserDefinedFunction creates a user-defined function in the database.
105+
// The function is created with the provided options.
106+
// The function is created in the system collection `_aqlfunctions`.
107+
// The function is created with the provided code and name.
108+
// If the function already exists, it will be updated with the new code.
109+
CreateUserDefinedFunction(ctx context.Context, options UserDefinedFunctionObject) (bool, error)
110+
111+
// DeleteUserDefinedFunction removes a user-defined AQL function from the current database.
112+
// If group is true, all functions with the given name as a namespace prefix will be deleted.
113+
// If group is false, only the function with the fully qualified name will be removed.
114+
// It returns the number of functions deleted.
115+
DeleteUserDefinedFunction(ctx context.Context, name *string, group *bool) (*int, error)
116+
117+
// GetUserDefinedFunctions retrieves all user-defined AQL functions registered in the current database.
118+
// It returns a list of UserDefinedFunctionObject, each containing the function's name, code, and isDeterministic.
119+
// The returned list may be empty array if no user-defined functions are registered.
120+
GetUserDefinedFunctions(ctx context.Context) ([]UserDefinedFunctionObject, error)
46121
}
47122

48123
type QuerySubOptions struct {
@@ -330,3 +405,129 @@ type ExplainQueryResult struct {
330405
// This attribute is not present when allPlans is set to true.
331406
Cacheable *bool `json:"cacheable,omitempty"`
332407
}
408+
409+
type QueryProperties struct {
410+
Enabled *bool `json:"enabled"`
411+
TrackSlowQueries *bool `json:"trackSlowQueries"`
412+
TrackBindVars *bool `json:"trackBindVars"`
413+
MaxSlowQueries *int `json:"maxSlowQueries"`
414+
SlowQueryThreshold *float64 `json:"slowQueryThreshold"`
415+
MaxQueryStringLength *int `json:"maxQueryStringLength"`
416+
}
417+
418+
type RunningAQLQuery struct {
419+
// The unique identifier of the query.
420+
Id *string `json:"id,omitempty"`
421+
// The database in which the query is running.
422+
Database *string `json:"database,omitempty"`
423+
// The user who executed the query.
424+
// This is the user who executed the query, not the user who is currently running the
425+
User *string `json:"user,omitempty"`
426+
// The query string.
427+
// This is the AQL query string that was executed.
428+
Query *string `json:"query,omitempty"`
429+
// The bind variables used in the query.
430+
BindVars *map[string]interface{} `json:"bindVars,omitempty"`
431+
// The time when the query started executing.
432+
// This is the time when the query started executing on the server.
433+
Started *string `json:"started,omitempty"`
434+
// The time when the query was last updated.
435+
// This is the time when the query was last updated on the server.
436+
RunTime *float64 `json:"runTime,omitempty"`
437+
// The PeakMemoryUsage is the peak memory usage of the query in bytes.
438+
PeakMemoryUsage *uint64 `json:"peakMemoryUsage,omitempty"`
439+
// The State of the query.
440+
// This is the current state of the query, e.g. "running", "finished", "executing", etc.
441+
State *string `json:"state,omitempty"`
442+
// The stream option indicates whether the query is executed in streaming mode.
443+
Stream *bool `json:"stream,omitempty"`
444+
}
445+
446+
type Flags struct {
447+
// CanBeDisabled indicates whether the query can be disabled.
448+
CanBeDisabled *bool `json:"canBeDisabled,omitempty"`
449+
// CanBeExecuted indicates whether the query can be executed.
450+
CanCreateAdditionalPlans *bool `json:"canCreateAdditionalPlans,omitempty"`
451+
//ClusterOnly indicates whether the query is only available in a cluster environment.
452+
ClusterOnly *bool `json:"clusterOnly,omitempty"`
453+
// DisabledByDefault indicates whether the query is disabled by default.
454+
// This means that the query is not executed unless explicitly enabled.
455+
DisabledByDefault *bool `json:"disabledByDefault,omitempty"`
456+
// EnterpriseOnly indicates whether the query is only available in the Enterprise Edition.
457+
EnterpriseOnly *bool `json:"enterpriseOnly,omitempty"`
458+
// Hidden indicates whether the query is hidden from the user.
459+
Hidden *bool `json:"hidden,omitempty"`
460+
}
461+
462+
type OptimizerRules struct {
463+
// Name of the optimizer rule.
464+
Name string `json:"name,omitempty"`
465+
Flags `json:"flags,omitempty"`
466+
}
467+
468+
type CacheRespObject struct {
469+
// BindVars are the bind variables used in the query.
470+
BindVars map[string]interface{} `json:"bindVars,omitempty"`
471+
// DataSources is a list of data sources used in the query.
472+
DataSources *[]string `json:"dataSources,omitempty"`
473+
// Hash is the plan cache key.
474+
Hash *string `json:"hash,omitempty"`
475+
// Hits is the number of times the cached plan has been utilized so far.
476+
Hits *uint32 `json:"hits,omitempty"`
477+
// Query is the AQL query string.
478+
Query *string `json:"query,omitempty"`
479+
}
480+
481+
type QueryPlanCacheRespObject struct {
482+
CacheRespObject `json:",inline"`
483+
// QueryHash is the hash of the AQL query string.
484+
QueryHash *uint32 `json:"queryHash,omitempty"`
485+
// FullCount indicates whether the query result contains the full count of documents.
486+
FullCount *bool `json:"fullCount,omitempty"`
487+
// Created is the time when the query plan has been added to the cache.
488+
Created *string `json:"created,omitempty"`
489+
// MemoryUsage is the memory usage of the cached plan in bytes.
490+
// This is the amount of memory used by the cached plan on the server.
491+
MemoryUsage *uint64 `json:"memoryUsage,omitempty"`
492+
}
493+
494+
type QueryCacheEntriesRespObject struct {
495+
CacheRespObject `json:",inline"`
496+
// Result is the number of documents in the query result.
497+
Results *uint32 `json:"results,omitempty"`
498+
// RunTime is the time it took to execute the query in seconds.
499+
RunTime string `json:"runTime,omitempty"`
500+
// Size is the size of the query result in bytes.
501+
Size *uint64 `json:"size,omitempty"`
502+
// Started is the time when the query has been started.
503+
// Date and time at which the query result has been added to the cache.
504+
Started *string `json:"started,omitempty"`
505+
}
506+
507+
type QueryCacheProperties struct {
508+
// IncludeSystem indicates whether the query cache includes system collections.
509+
IncludeSystem *bool `json:"includeSystem,omitempty"`
510+
// MaxEntrySize is the maximum size of a single query cache entry in bytes.
511+
MaxEntrySize *uint64 `json:"maxEntrySize,omitempty"`
512+
// MaxResults is the maximum number of results that can be stored in the query cache.
513+
MaxResults *uint16 `json:"maxResults,omitempty"`
514+
// MaxResultsSize is the maximum size of the query cache in bytes.
515+
MaxResultsSize *uint64 `json:"maxResultsSize,omitempty"`
516+
// Mode is the query cache mode.
517+
// The mode can be one of the following values:
518+
// "on" - the query cache is enabled and will be used for all queries.
519+
// "off" - the query cache is disabled and will not be used for any queries.
520+
// "demand" - the query cache is enabled, but will only be used for queries that explicitly request it.
521+
Mode *string `json:"mode,omitempty"`
522+
}
523+
524+
type UserDefinedFunctionObject struct {
525+
// Code is the JavaScript function body as a string.
526+
Code *string `json:"code"`
527+
528+
// Name is the fully qualified name of the user-defined function, including namespace.
529+
Name *string `json:"name"`
530+
531+
// IsDeterministic indicates whether the function always produces the same output for identical input.
532+
IsDeterministic *bool `json:"isDeterministic"`
533+
}

0 commit comments

Comments
 (0)