June 16, 2018
For those interested, Basil, my textual database designer, can now export database schemas in SQL, CQL, Go and Crystal format, and their fake data in SQL and CQL format.

I've slightly changed the syntax so that the table columns can use any combination of scalar types, foreign keys, tuples, maps, lists and sets.

You can download it here :

https://github.com/senselogic/BASIL

Here are two sample scripts illustrating the new syntax :

BLOG | count 5

    SECTION

        Id : UINT64 | key, unique, incremented
        Number : UINT64
        Name : STRING | capacity 45
        Text : STRING
        Image : STRING | capacity 45

        ImageIndex : UINT64 | !stored

    USER

        Id : UINT64 | key, unique, incremented
        FirstName : STRING | capacity 45
        LastName : STRING | capacity 45
        Email : STRING | capacity 45
        Pseudonym : STRING | capacity 45
        Password : STRING | capacity 45
        Phone : STRING | capacity 45
        Street : STRING
        City : STRING | capacity 45
        Code : STRING | capacity 45
        Region : STRING | capacity 45
        Country : STRING | capacity 45
        Company : STRING | capacity 45
        ItIsAdministrator : BOOL

    ARTICLE | count 15

        Id : UINT64 | key, unique, incremented
        SectionId : SECTION.Id | partitioned
        UserId : USER.Id | clustered
        Title : STRING
        Text : STRING
        Image : STRING | capacity 45
        Date : DATE

        Section : POINTER[ SECTION ] | !stored
        User : POINTER[ USER ] | !stored
        ImageIndex : UINT64 | !stored

    COMMENT | count 30

        Id : UINT64 | key, unique, incremented
        ArticleId : ARTICLE.Id | indexed
        UserId : USER.Id | indexed
        Text : STRING | english 2 4 5 7
        DateTime : DATETIME

        Article : POINTER[ ARTICLE ] | !stored
        User : POINTER[ USER ] | !stored

    SUBSCRIBER

        Id : UINT64 | key, unique, incremented
        Name : STRING | capacity 45
        Email : STRING | capacity 45

TEST | count 10

    SIMPLE

        Uuid : UUID | key, unique
        Bool : BOOL | partitioned
        Int8 : INT8 | clustered
        Uint8 : UINT8 | indexed
        Int16 : INT16
        Uint16 : UINT16
        Int32 : INT32
        Uint32 : UINT32
        Int64 : INT64
        Uint64 : UINT64
        Float32 : FLOAT32
        Float64 : FLOAT64
        String : STRING
        Date : DATE | unique
        DateTime : DATETIME
        Blob : BLOB

    COMPOUND

        Id : INT32 | key, unique, incremented
        Location : Country : STRING | uppercase
        Name : TUPLE[ FirstName : STRING, LastName : STRING ] | unique
        NameSet : SET[ TUPLE[ FirstName : STRING, LastName : STRING ] ] | count 2
        CompanyMap : MAP[ Phone : STRING, Company : STRING ] | count 2
        EmailSet : SET[ Email : STRING ] | count 2
        PhoneList : LIST[ Phone : STRING ] | count 2
        SimpleDate : SIMPLE.Date
        SimpleDateMap : MAP[ COMPOUND.Name, SIMPLE.Date ] | count 2
        SimpleDateSet : SET[ SIMPLE.Date ] | count 2
        SimpleDateList : LIST[ SIMPLE.Date ] | count 1 3
        NameSetMap : MAP[ SIMPLE.Date, COMPOUND.NameSet ] | count 2
        SimplePointerArray : ARRAY[ POINTER[ SIMPLE ] ] | !stored