1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

orm: add initial pg support (#9827)

This commit is contained in:
Louis Schmieder
2021-04-25 17:57:55 +02:00
committed by GitHub
parent fc3b628440
commit 7184629969
8 changed files with 263 additions and 50 deletions

1
examples/database/psql/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
customer

View File

@ -0,0 +1,64 @@
module main
import pg
const dash = '----------------------------------------------------------------'
struct Customer {
id int
name string
nr_orders int
country string
}
fn main() {
/*db := pg.connect(pg.Config{
host: 'localhost' //'127.0.0.1'
user: 'postgres'
dbname: 'customerdb'
}) or {
println('failed to connect')
println(err)
return
}
nr_customers := db.select count from Customer
println('Total customers: $nr_customers')
// V syntax can be used to build queries
println(dash)
bg_country := 'Bulgaria'
bg_customers := db.select from Customer where country == bg_country && id != 2
for customer in bg_customers {
println('$customer.country | $customer.id - $customer.name')
}
println(dash)
ru_customers := db.select from Customer where country == 'Russia'
for customer in ru_customers {
println('$customer.country | $customer.id - $customer.name')
}
// by adding `limit 1` we tell V that there will be only one object
println(dash)
existing := db.select from Customer where id == 1 limit 1 or { panic(err) }
println('Existing customer name: $existing.name')
println('Existing customer full information:')
println(existing)
println(dash)
q := Customer{}
// It's easy to handle queries that don't return any data
if anon := db.select from Customer where id == 12345 && name == q.name &&
nr_orders > q.nr_orders limit 1 {
println('Non existing customer name: $anon.name')
}
// Insert a new customer
nc := Customer{
name: 'John Doe'
nr_orders: 10
}
db.insert(nc)*/
}

View File

@ -0,0 +1,122 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 9.5.19
-- Dumped by pg_dump version 9.5.19
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
--
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
--
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: customers; Type: TABLE; Schema: public; Owner: myuser
--
CREATE TABLE public.customers (
id integer NOT NULL,
name text DEFAULT ''::text,
nr_orders integer DEFAULT 0,
country text DEFAULT 'England'::text,
created_at timestamp without time zone DEFAULT now()
);
ALTER TABLE public.customers OWNER TO myuser;
--
-- Name: customers_id_seq; Type: SEQUENCE; Schema: public; Owner: myuser
--
CREATE SEQUENCE public.customers_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public.customers_id_seq OWNER TO myuser;
--
-- Name: customers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: myuser
--
ALTER SEQUENCE public.customers_id_seq OWNED BY public.customers.id;
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: myuser
--
ALTER TABLE ONLY public.customers ALTER COLUMN id SET DEFAULT nextval('public.customers_id_seq'::regclass);
--
-- Data for Name: customers; Type: TABLE DATA; Schema: public; Owner: myuser
--
COPY public.customers (id, name, nr_orders, country, created_at) FROM stdin;
2 Pippi Långstrump 3 Bulgaria 2019-08-19 09:41:30.78888
1 Bilbo Begins 11 Bulgaria 2019-08-19 09:40:31.396807
3 Viktualia Rullgardina 0 Bulgaria 2019-08-19 09:42:52.723223
4 Krusmynta Efraimsdotter 5 Bulgaria 2019-08-19 09:43:04.083209
5 Ana Karenina 0 Russia 2019-08-20 15:41:50.244971
7 Jiji Lolobridgida 0 Italy 2019-08-20 15:42:26.020113
6 Viktor Savashkin 8 Russia 2019-08-20 15:42:07.213557
\.
--
-- Name: customers_id_seq; Type: SEQUENCE SET; Schema: public; Owner: myuser
--
SELECT pg_catalog.setval('public.customers_id_seq', 1, true);
--
-- Name: customers_pkey; Type: CONSTRAINT; Schema: public; Owner: myuser
--
ALTER TABLE ONLY public.customers
ADD CONSTRAINT customers_pkey PRIMARY KEY (id);
--
-- Name: SCHEMA public; Type: ACL; Schema: -; Owner: postgres
--
REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;
--
-- PostgreSQL database dump complete
--