Package: typeql-grammar
Introducing TypeQLTypeQL is the query language ofTypeDB.Conceptual and intuitive. TypeQL is based directly on theconceptual data modelof TypeDB. Its queries comprise sequences of statements that assemble intopatterns. This mirrors natural language and makes it easy and intuitive to express even highly complex queries.Fully declarative and composableTypeQL is fully declarative, allowing us to define query patterns without considering execution strategy. The user only composes sets of requirements, and TypeDB finds all matching data to process.A fully variablizable language. Any concept in TypeQL has a type, and so any concept in TypeQL can be variablized in a query – even types! This enables TypeQL to express powerfulparametricdatabase operations.Built for consistency. TypeQL patterns are underpinned by a powerful type system that ensure safety and consistency of database applications.For a quick overview of the range of statements that are available in TypeQL check out ourTypeQL in 20 queries guide.IMPORTANT NOTE:TypeDB & TypeQL is in the process of being ported over and rewritten inRust. There will changes that won't be backwards compatible, as we refine the the language further to extend its expressivity, as well as changes to the byte storage data structure to further boost performanc significantly. We're aiming to complete this by February/March 2024, released as TypeDB 3.0, along with preliminary benchmarks of TypeDB.A polymorphic query languageDefine types, inheritance, and interfacesTypeQL features the type system of thePolymorphic Entity-Relation-Attribute(PERA) model: entities are independent concepts, relations depend on role interfaces played by either entities or relations, and attributes are properties with a value that can interface with (namely, be owned by) entities or relations. Entities, relations, and attributes are all considered first-class citizens and can be subtyped, allowing for expressive modeling without the need for normalization or reification.defineid sub attribute, value string;email sub id;path sub id;name sub id;user sub entity,owns email @unique,plays permission:subject,plays request:requestee;file sub entity,owns path,plays permission:object;action sub entity,owns name,plays permission:action;permission sub relation,relates subject,relates object,relates action,plays request:target;request sub relation,relates target,relates requestee;Write polymorphic database queriesUse subtyping to query a common supertype and automatically retrieve matching data. Variablize queries to return types, roles, and data. New types added to the schema are automatically included in the results of pre-existing queries against their supertype, so no refactoring is necessary.match $user isa user,
    has full-name $name,
    has email $email;
# This returns all users of any type

match $user isa employee,
    has full-name $name,
    has email $email,
    has employee-id $id;
# This returns only users who are employees

match $user-type sub user;
$user isa $user-type,
    has full-name $name,
    has email $email;
# This returns all users and their typeBuilding queries with easeGain clarity through natural and fully declarative syntaxTypeQL's near-natural syntax and fully declarative properties make queries easily understandable, reducing the learning curve and easing maintenance. This allows you to define query patterns without considering execution strategy. TypeDB's query planner always optimizes queries, so you don't have to worry about the logical implementation.match$kevin isa user, has email "kevin@vaticle.com";insert$chloe isa full-time-employee,has full-name "Chloé Dupond",has email "chloe@vaticle.com",has employee-id 185,has weekly-hours 35;$hire (employee: $chloe, ceo: $kevin) isa hiring,has date 2023-09-27;Develop modularly with fully composable query patternsTypeDB's TypeQL query language uses pattern matching to find data. Patterns in TypeQL are fully composable. Every complex pattern can be broken down into a conjunction of atomic constraints, which can be concatenated in any order. Any pattern composed of valid constraints is guaranteed to be valid itself, no matter how complex.match$user isa user;match$user isa user;$user has email "john@vaticle.com";match$user isa user;$user has email "john@vaticle.com";(team: $team, member: $user) isa team-membership;match$user isa user;$user has email "john@vaticle.com";(team: $team, member: $user) isa team-membership;$team has name "Engineering";TypeQL grammarNote: All TypeDB Clients, as well as TypeDB Console, accept TypeQL syntax natively.
If you are using TypeDB, you do not need additional libraries/tools to use TypeQL syntax natively.
However, if you would like to construct TypeQL queries programmatically, you can do so with "Language Libraries" listed below.TypeQL GrammarTypeQL Language Library for JavaTypeQL Language Library for Rust (under development)TypeQL Language Library for Python (under development)ResourcesDeveloper resourcesDocumentation:https://typedb.com/docsDiscussion Forum:https://forum.typedb.com/Discord Chat Server:https://typedb.com/discordCommunity Projects:https://github.com/typedb-osiUseful linksIf you want to begin your journey with TypeDB, you can explore the following resources:More on TypeDB'sfeaturesIn-depth dive into TypeDB'sphilosophyOurTypeDB quickstartContributionsTypeDB and TypeQL are built using various open-source frameworks and technologies throughout its evolution.
Today TypeDB and TypeQL useSpeedb,pest,SCIP,Bazel,gRPC,ZeroMQ,
andCaffeine.Thank you!In the past, TypeDB was enabled by various open-source products and communities that we are hugely thankful to:RocksDB,ANTLR,Apache Cassandra,Apache Hadoop,Apache Spark,Apache TinkerPop,
andJanusGraph.Package hostingPackage repository hosting is graciously provided byCloudsmith.
Cloudsmith is the only fully hosted, cloud-native, universal package management solution, that
enables your organization to create, store and share packages in any format, to any place, with total
confidence.LicensingThe TypeQL language libraries, such as TypeQL Rust and Java, are distributed under Apache License, Version 2.0, January 2004.
The full license can be founder at:LICENSE.However, the TypeQL Grammar libraries, located under the/grammarpackage in this repository,
are distributed under the terms GNU Affero General Public License v3.0 ("AGPL 3.0"), but with a special exception.
Please refer toTypeQL Grammar Licensingfor further details.Copyright (C) 2023 Vaticle.