Categorygithub.com/ZenLiuCN/engineX
repository
0.0.2
Repository: https://github.com/zenliucn/enginex.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author

# README

extened with engine

example

install

CGO_LDFLAGS="-L$(pwd)/.libs/win/" \
go install -tags=duckdb_use_lib,all github.com/ZenLiuCN/engineX/engine@latest

init an project

cd example
engine -dp

write script

helper.ts

// @ts-ignore
import {SQLX} from "go/sqlx"


export class Duck {
    db: SQLX

    constructor(relativeExtensions: boolean = true) {
        this.db = new SQLX("duckdb", "?access_mode=READ_WRITE&allow_unsigned_extensions=true")
        if (relativeExtensions)
            this.db.exec("SET extension_directory= './extensions'")
    }


    use(fn: (d: Duck) => void) {
        fn(this)
        return this
    }

    apply<T>(fn: (d: Duck) => T): T {
        return fn(this)
    }
    read(fn: (array: Array<any>) =>void, query: string, args?: Record<string, any>){
        fn(this.query(query,args))
        return this
    }
    modify(fn: (array: { lastInsertedId: number; rowsAffected: number }) =>void, query: string, args?: Record<string, any>){
        fn(this.exec(query,args))
        return this
    }
    get<T>(fn: (array: Array<any>) => T, query: string, args?: Record<string, any>) {
        return fn(this.query(query, args))
    }

    mut<T>(fn: (result: {
        lastInsertedId: number
        rowsAffected: number
    }) => T, query: string, args?: Record<string, any>) {
        return fn(this.exec(query, args))
    }

    query(query: string, args?: Record<string, any>) {
        return this.db.query(query, args)
    }

    exec(query: string, args?: Record<string, any>): {
        lastInsertedId: number
        rowsAffected: number
    } {
        return this.db.exec(query, args)
    }

    close() {
        this.db?.close()
        this.db = null
    }

    install(ext: string) {
        this.db.exec(`INSTALL ${ext}`)
        return this
    }

    xPostgres() {
        this.install("postgres")
        return this
    }

    xMySQL() {
        return this.install("mysql")

    }

    xHttp() {
        return this.install("http")
    }

    xExcel() {
        return this.install("excel")

    }

    xFts() {
        return this.install("fts")

    }

    xArrow() {
        return this.install("arrow")

    }

    xInet() {
        return this.install("inet")

    }

    xVss() {
        return this.install("vss")

    }

    extensions(): {
        aliases: string[],
        description: string,
        extension_name: string,
        extension_version: string,
        install_mode?: string,
        install_path: string,
        installed: boolean,
        installed_from: string,
        loaded: boolean
    }[] {
        return this.query("FROM duckdb_extensions()")
    }
}

testing.ts

#! engine

import {Duck} from "./helper";
const db=new Duck()
const {log,table}=console
    db
        .read(log,"SELECT current_setting('access_mode')")
        .use(d=>table(d.extensions()))

/*log(db.exec("CREATE TABLE users(name VARCHAR, age INTEGER, height FLOAT, awesome BOOLEAN, bday DATE)"))
log(db.exec("INSERT INTO users VALUES('marc', 99, 1.91, true, '1970-01-01')"))
log(db.exec("INSERT INTO users VALUES('macgyver', 70, 1.85, true, '1951-01-23')"))
log(db.query('	SELECT name, age, height, awesome, bday	FROM users	WHERE (name = :name1 OR name = :name2) AND age > :age AND awesome = :awesome',	{
    name1:  "macgyver", name2:"marc", age:30, awesome:true,
}))
log(db.query("SELECT ('{\"duck\": 42}'::JSON->'$.duck')::INTEGER Val"))
log(db.query("SELECT excel_text(1234567.897, 'h:mm AM/PM') AS timestamp"))

log(db.exec("CREATE TABLE documents (document_identifier VARCHAR, text_content VARCHAR, author VARCHAR, doc_version INTEGER)"))
log(db.exec("INSERT INTO documents VALUES ('doc1', 'The mallard is a dabbling duck that breeds throughout the temperate.', 'Hannes Mühleisen', 3), ('doc2', 'The cat is a domestic species of small carnivorous mammal.', 'Laurens Kuiper', 2);"))
log(db.exec("PRAGMA create_fts_index('documents', 'document_identifier', 'text_content', 'author')"))
log(db.query("SELECT document_identifier, text_content, score FROM ( SELECT *, fts_main_documents.match_bm25(  document_identifier, 'Muhleisen', fields := 'author') AS score FROM documents) sq WHERE score IS NOT NULL AND doc_version > 2 ORDER BY score DESC"))
log(db.query("SELECT document_identifier, text_content, score FROM ( SELECT *, fts_main_documents.match_bm25( document_identifier,'small cats') AS score  FROM documents ) sq WHERE score IS NOT NULL ORDER BY score DESC"))
table(db.query("FROM duckdb_extensions()"))
log(db.query("SELECT '127.0.0.1'::INET AS addr"))*/
db.close()

execute

engine testing.ts