Skip to content

Library for building bbolt applications, including support for entities, queries and simple fks and indexes.

License

Notifications You must be signed in to change notification settings

openziti/storage

Overview

This library contains a entity framework for bbolt, including CRUD (Create, Read, Update, Delete) and query operations, a filtering DSL (Domain Specific Language) as well as an AST (Abstract Syntax Tree) for the DSL

  • zitiql contains the ANTLR4 based grammar for the filtering DSL
    • Use the ./generate.sh script to generate the go code when the grammar changes
  • ast contains an AST which can be built from the grammar.
    • It is structured to be able to run filters across some set of data as well as interface for getting typing information about the symbols in the underlying datastore
    • It includes a visitor pattern which can be used for AST validations or transformations
    • It includes type transformation code, allowing the AST to be transformed into a typed version of itself
  • boltz contains:
    • Entity management framework, including entity store interfaces and base types for doing CRUD and querying
    • Code for managing bbolt indexes and foreign keys
    • bbolt utilities for getting/setting typed data from bbolt (see typed_bucket.go)
    • Implementation of AST interfaces for reading symbols and getting symbol type information

ANTLR patches

ARM 32 Patch

A compile issue happens on arm 32 which required the following patch:

diff --git a/storage/zitiql/zitiql_parser.go b/storage/zitiql/zitiql_parser.go
index af80e9d..8732ec4 100644
--- a/storage/zitiql/zitiql_parser.go
+++ b/storage/zitiql/zitiql_parser.go
@@ -1170,7 +1170,7 @@ func (p *ZitiQlParser) Start() (localctx IStartContext) {
        p.GetErrorHandler().Sync(p)
        _la = p.GetTokenStream().LA(1)
 
-       for ((_la-3)&-(0x1f+1)) == 0 && ((1<<uint((_la-3)))&((1<<(ZitiQlParserLPAREN-3))|(1<<(ZitiQlParserBOOL-3))|(1<<(ZitiQlParserALL_OF-3))|(1<<(ZitiQlParserANY_OF-3))|(1<<(ZitiQlParserCOUNT-3))|(1<<(ZitiQlParserISEMPTY-3))|(1<<(ZitiQlParserNOT-3))|(1<<(ZitiQlParserIDENTIFIER-3)))) != 0 {
+       for ((_la-3)&-(0x1f+1)) == 0 && ((uint64(1)<<uint((_la-3)))&((1<<(ZitiQlParserLPAREN-3))|(1<<(ZitiQlParserBOOL-3))|(1<<(ZitiQlParserALL_OF-3))|(1<<(ZitiQlParserANY_OF-3))|(1<<(ZitiQlParserCOUNT-3))|(1<<(ZitiQlParserISEMPTY-3))|(1<<(ZitiQlParserNOT-3))|(1<<(ZitiQlParserIDENTIFIER-3)))) != 0 {
                {
                        p.SetState(141)
                        p.Query()

It may be a boundary condition and may be fixed if we add another constant, or it may not. Either way, the fix may need to be reapplied when the grammer is regenerated.

About

Library for building bbolt applications, including support for entities, queries and simple fks and indexes.

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages