Skip to main content

TypeQL Grammar for Python

Project description

TypeQL

Factory GitHub release Discord Discussion Forum Stack Overflow Stack Overflow Hosted By: Cloudsmith

Introducing TypeQL

TypeQL is the query language of TypeDB. It is based on a novel, elegant, and declarative querying paradigm described in recent research. TypeQL is designed to be intuitive and mirror natural language, making it straightforward to compose complex queries using high-level abstractions.

IMPORTANT NOTE: > > TypeDB & TypeQL are in the process of being rewritten in Rust. There will be significant refinement to the language, and minor breaks in backwards compatibility. Learn about the changes on our roadmap issue on GitHub. The biggest change to TypeDB 3.0 will be our storage data structure and architecture that significantly boosts performance. We’re aiming to release 3.0 in the summer this year, along with preliminary benchmarks of TypeDB.

A polymorphic query language

Define types, inheritance, and interfaces

TypeQL features the type system of the Polymorphic 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.

define

id 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 queries

Use 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 type

Building queries with ease

Gain clarity through natural and fully declarative syntax

TypeQL'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 patterns

TypeDB'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 grammar

Note: 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.

Resources

Developer resources

Useful links

If you want to begin your journey with TypeDB, you can explore the following resources:

Contributions

TypeDB and TypeQL are built using various open-source frameworks and technologies throughout its evolution. Today TypeDB and TypeQL use Speedb, pest, SCIP, Bazel, gRPC, ZeroMQ, and Caffeine.

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, and JanusGraph.

Package hosting

Package repository hosting is graciously provided by Cloudsmith. 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.

Licensing

TypeQL grammar and language libraries are provided under the Mozilla Public License 2.0 (MPL 2.0), and therefore freely usable without restriction when unmodified.

The full license can be founder at: LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

typeql-grammar-2.28.6.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

typeql_grammar-2.28.6-py3-none-any.whl (4.6 kB view details)

Uploaded Python 3

File details

Details for the file typeql-grammar-2.28.6.tar.gz.

File metadata

  • Download URL: typeql-grammar-2.28.6.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.10

File hashes

Hashes for typeql-grammar-2.28.6.tar.gz
Algorithm Hash digest
SHA256 ec9d9af9c1a16837dae8e4b1b7a62b7f0c57cb10ed61129230a62d60d1aebb38
MD5 3e94785445c0c5cc84a97e64ade080b1
BLAKE2b-256 62e222c94af77a40663dfe9a674e2e1f0180d250f478508b7e1f8ee6ad165263

See more details on using hashes here.

File details

Details for the file typeql_grammar-2.28.6-py3-none-any.whl.

File metadata

File hashes

Hashes for typeql_grammar-2.28.6-py3-none-any.whl
Algorithm Hash digest
SHA256 1e1d2ffd433db7ed8305af33df9f7b38c38d401568791370adfaac09dff12ded
MD5 c2762a2a53de7976537ae9963bff1a7f
BLAKE2b-256 47b5a896d8d6455f8e82b9d067afd659db25de0e44732cb40890d81a3d70e938

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page