Coder Social home page Coder Social logo

zig-postgres's Introduction

zig-postgres

Light bindings around Postgres libpq

This is tested with zig 0.8

Installing libpg on debian linux

sudo apt-get install libpq-dev

How to install


Add this repository as submodule

git submodule add [email protected]:tonis2/zig-postgres.git dependencies/zig-postgres

Add following code lines into your project build.zig

This code adds the package and links required libraries.

    exe.addPackage(.{ .name = "postgres", .path = "/dependencies/zig-postgres/src/postgres.zig" });
    exe.linkSystemLibrary("c");
    exe.linkSystemLibrary("libpq");

Running examples or tests requires db url attribute, for example

zig build test -Ddb=postgresql://db_url

zig build main -Ddb=postgresql://db_url

How to use


Connecting to database

    const Pg = @import("postgres").Pg;

    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    const allocator = &gpa.allocator;
    defer std.debug.assert(!gpa.deinit());

    var db = try Pg.connect(allocator, "postgresql://root@postgresURL:26257?sslmode=disable");

Executing SQL

   const schema =
        \\CREATE DATABASE IF NOT EXISTS root;
        \\CREATE TABLE IF NOT EXISTS users (id INT, name TEXT, age INT);
    ;

    _ = try db.exec(schema);

Inserting data

Be mindful that this query, uses struct name as lowercase letters for table name.

  const Users = struct {
        id: i16,
        name: []const u8,
        age: i16,
    };

 _ = try db.insert(Users{ .id = 1, .name = "Charlie", .age = 20 });
 _ = try db.insert(Users{ .id = 2, .name = "Steve", .age = 25 });
 _ = try db.insert(Users{ .id = 3, .name = "Karl", .age = 25 });


 _ = try db.insert(&[_]Users{
     Users{ .id = 4, .name = "Tony", .age = 25 },
     Users{ .id = 5, .name = "Sara", .age = 32 },
     Users{ .id = 6, .name = "Fred", .age = 11 },
  });

Exec query with values

_ = try db.execValues("SELECT * FROM users WHERE name = {s}", .{"Charlie"});

_ = try db.execValues("INSERT INTO users (id, name, age) VALUES ({d}, {s}, {d})", .{ 5, "Tom", 32 });

Read query results

var result = try db.execValues("SELECT * FROM users WHERE id = {d}", .{2});
var user = result.parse(Users, null).?;

print("{d} \n", .{user.id});
print("{s} \n", .{user.name});
var results = try db.execValues("SELECT * FROM users WHERE age = {d}", .{25});

while (results.parse(Users, null)) |user| {
    print("{s} \n", .{user.name});
}
var result = try db.execValues("SELECT * FROM users WHERE name = {s}", .{"Charlie"});
var user = result.parse(Users, null}).?;

if(user) print("{s} \n", .{user.name});

Many thanks for this repository

zig-postgres's People

Contributors

tonis2 avatar fractalouroboros avatar

Stargazers

Felix Wittmann avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.