Aragog CLI

pipeline status MIT licensed Crates.io

Migration and schema generation tool for aragog (Version > 0.7).

Note: Currently, transactional operations are not supported, a failing migrations will not automatically rollback and you may need to handle some errors manually

Installation

run with cargo: cargo install aragog_cli

Options

Verbose

Add -v option for debug log and -vv for verbose log

Commands

Creating a Migration

Command: aragog create_migration $MIGRATION_NAME

Creates a new migration file in $SCHEMA_PATH/migrations/. If the db folder is missing it will be created automatically.

Launching migrations

Command: aragog migrate

Will launch every migration in $SCHEMA_PATH/migrations/ and update the schema according to its current version. If there is no schema it will be generated.

Rollbacking migrations

Command: aragog rollback

Will rollback 1 migration in $SCHEMA_PATH/migrations/ and update the schema according to its current version.

Command: aragog rollback $COUNT

Will rollback $COUNT migrations in $SCHEMA_PATH/migrations/ and update the schema according to its current version.

Truncate database

Command: aragog truncate_database

Will drop every graph and collection in the database.

Describe database

Command: argog describe

Will render information about the database, schema synced version and render a table describing every collection.

Migration files

Every migration file looks like this:

yaml up: # Mandatory - up_command: options: Option down: # optional - down_command: options: Option

The up section launches on migrate and down on rollback. For perfect migration files, down should reverse exactly everything up does.

Commands

There is a list of all available commands for the up and down section:

Collection

yaml - create_collection: # Creates a colllection with name: CollectionName # Mandatory name wait_for_sync: true # Optional waitForSync attribute - delete_collection: # Deletes a collection with name: CollectionName # Mandatory name - create_edge_collection: # Creates a edge collection name: EdgeCollectionName # Mandatory name wait_for_sync: false # Optional waitForSync attribute - delete_edge_collection: # Deletes a edge collection name: EdgeCollectionName # Mandatory name

AQL

yaml - aql: FOR i in.. # Runs a AQL command

Graph

Full parameters: yaml - create_graph: # Creates a Graph name: GraphName # Mandatory name edge_definitions: # Mandatory edge definition list - collection: MyEdgeCollection # Edge Collection Name from: ["MyCollection"] # List of collections for the `from` part to: ["MyCollection2"] # List of collections for the `to` part orphan_collections: # Optional list of orphan collections - MyCollection3 is_smart: false # Optional attribute (enterprise edition only) is_disjoint: false # Optional attribute (enterprise edition only) options: # Optional attribute smart_graph_attribute: region # Optional attribute number_of_shards: 2 # Optional attribute replication_factor: 9 # Optional attribute write_concern: 8 # Optional attribute - delete_graph: # Deletes a graph name: Graph # Mandatory name

For more information on the graph creation options see the ArangoDB Documentation

You can use it with minimal parameters: yaml - create_graph: name: GraphName edge_definitions: - collection: MyEdgeCollection from: ["MyCollection"] to: ["MyCollection2"] - delete_graph: name: Graph

Index

yaml - create_index: # Creates an Index name: MyIndex # Mandatory name fields: ["name"] # Mandatory index fields list collection: MyCollection # Mandatory collection name (doesn't work on edge collections) settings: # Mandatory settings type: persistent # Mandatory index type (hash, persistent, ttl, geospatial, fulltext, skiplist) unique: true sparse: false deduplicate: false - delete_index: # Deletes an Index name: MyIndex # Mandatory name collection: MyCollection # Mandatory collection

You have various parameters on the settingsaccording to index type:

Persistent index

yaml type: persistent unique: true sparse: false deduplicate: false

Hash index

yaml type: hash unique: true sparse: false deduplicate: false

SkipList index

yaml type: skiplist unique: true sparse: false deduplicate: false

TTL index

yaml type: ttl expireAfter: 3600

The expireAfter field is in camelCase instead of snake_case, this will be fixed in future releases

GeoSpatial index

yaml type: geo geoJson: false

The geoJson field is in camelCase instead of snake_case, this will be fixed in future releases

Fulltext index

yaml type: ttl minLength: 3600

The minLength field is in camelCase instead of snake_case, this will be fixed in future releases

Todo list