Skip to content

MoeDevelops/starmap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

29 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Starmap

THIS IS VERY WORK IN PROGRESS! EVERYTHING CAN (and probably will) BREAK!

But feel free to try it out!

Package Version Hex Docs

Plans for v0.1.X (Current)

  • Fix bugs that might occur
  • Support all operations with 1-9 columns
  • Start with documentation

Plans for v0.2.0

  • Better documentation
  • Split project to starmap and starmap_sqlight
  • Remove dependency of sqlight from starmap
  • Create starmap_pgo

Usage

gleam add starmap
import gleam/int
import gleam/io
import gleam/list
import gleam/option.{type Option, None, Some}
import sqlight
import starmap/creation
import starmap/insertion
import starmap/query
import starmap/schema.{type Column, Column, PrimaryKey}
import starmap/sqlight/execute
import starmap/sqlight/types

const accounts_table = "accounts"

const accounts = Accounts(
  id: Column(accounts_table, "id", types.integer, [PrimaryKey]),
  name: Column(accounts_table, "name", types.text, []),
  avatar: Column(accounts_table, "avatar", types.text_nullable, []),
)

pub type Accounts(a) {
  Accounts(
    id: Column(Int, a),
    name: Column(String, a),
    avatar: Column(Option(String), a),
  )
}

pub fn main() {
  use conn <- sqlight.with_connection(":memory:")

  let assert Ok(_) =
    accounts_table
    |> creation.create_table3(accounts.id, accounts.name, accounts.avatar)
    |> execute.create_table3(conn)

  let assert Ok(_) =
    insertion.insert_into(accounts_table)
    |> insertion.columns2(accounts.name, accounts.avatar)
    |> insertion.values([
      #("Lucy", Some("lucy.svg")),
      #("John Doe", None),
      #("MoeDev", None),
    ])
    |> execute.insertion2(conn)

  let assert Ok(results) =
    query.from(accounts_table)
    |> query.select3(accounts.id, accounts.name, accounts.avatar)
    |> execute.query3(conn)

  results
  |> list.map(fn(row) {
    let #(id, name, avatar) = row
    int.to_string(id) <> " " <> name <> " " <> option.unwrap(avatar, "")
  })
  |> list.each(io.println)
  // 1 Lucy lucy.svg
  // 2 John Doe 
  // 3 MoeDev
}

Further documentation can be found at https://hexdocs.pm/starmap.

About

๐ŸŒŒ Type-Safe SQL Library for Gleam

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages