Initial project import

This commit is contained in:
Agila Forge Importer committed 2026-07-13 15:20:32 +00:00
commit 23f2d29e32
11957 files changed
+1754577

No files matched your search

+17
View File
@@ -0,0 +1,17 @@
// vtest build: !(macos || windows)
import db.mysql
fn main() {
mut conn := mysql.connect(
host: 'localhost'
port: 3306
username: 'root'
password: ''
dbname: 'mysql'
)!
res := conn.query('show tables')!
for row in res.rows() {
println(row.vals.join(', '))
}
conn.close()!
}
+161
View File
@@ -0,0 +1,161 @@
// vtest build: !(macos || windows)
import db.mysql
import pool
import time
// Define your connection factory function
fn create_conn() !&pool.ConnectionPoolable {
config := mysql.Config{
host: '127.0.0.1'
port: 3306
username: 'root'
password: '12345678'
dbname: 'mysql'
}
db := mysql.connect(config)!
return &db
}
fn main() {
// Configure pool parameters
config := pool.ConnectionPoolConfig{
max_conns: 50
min_idle_conns: 5
max_lifetime: 2 * time.hour
idle_timeout: 30 * time.minute
get_timeout: 5 * time.second
}
// Create connection pool
mut my_pool := pool.new_connection_pool(create_conn, config)!
defer {
// When application exits
my_pool.close()
}
// Acquire connection
mut conn := my_pool.get()!
defer {
// Return connection to pool
my_pool.put(conn) or { println(err) }
}
// Convert `conn` to a `mysql.DB` object
mut db := conn as mysql.DB
assert db.validate()!
mut response := db.exec('drop table if exists users')!
assert response == []mysql.Row{}
response = db.exec('create table if not exists users (
id INT PRIMARY KEY AUTO_INCREMENT,
username TEXT,
last_name TEXT NULL DEFAULT NULL
)')!
assert response == []mysql.Row{}
mut result_code := db.exec_none('insert into users (username) values ("jackson")')
assert result_code == 0
result_code = db.exec_none('insert into users (username) values ("shannon")')
assert result_code == 0
result_code = db.exec_none('insert into users (username) values ("bailey")')
assert result_code == 0
result_code = db.exec_none('insert into users (username) values ("blaze")')
assert result_code == 0
rows := db.exec_param('insert into users (username) values (?)', 'Hi')!
assert rows == []mysql.Row{}
// Regression testing to ensure the query and exec return the same values
res := db.query('select * from users')!
response = res.rows()
assert response[0].vals[1] == 'jackson'
response = db.exec('select * from users')!
assert response[0].vals[1] == 'jackson'
response = db.exec('select * from users where id = 400')!
assert response.len == 0
single_row := db.exec_one('select * from users')!
assert single_row.vals[1] == 'jackson'
response = db.exec_param_many('select * from users where username = ?', [
'jackson',
])!
assert response[0] == mysql.Row{
vals: ['1', 'jackson', '']
}
response = db.exec_param_many('select * from users where username = ? and id = ?', [
'bailey',
'3',
])!
assert response[0] == mysql.Row{
vals: ['3', 'bailey', '']
}
response = db.exec_param_many('select * from users', [''])!
assert response == [
mysql.Row{
vals: ['1', 'jackson', '']
},
mysql.Row{
vals: ['2', 'shannon', '']
},
mysql.Row{
vals: ['3', 'bailey', '']
},
mysql.Row{
vals: ['4', 'blaze', '']
},
mysql.Row{
vals: ['5', 'Hi', '']
},
]
response = db.exec_param('select * from users where username = ?', 'blaze')!
assert response[0] == mysql.Row{
vals: ['4', 'blaze', '']
}
// transaction test
// turn off `autocommit` first
db.autocommit(false)!
// begin a new transaction
db.begin()!
result_code = db.exec_none('insert into users (username) values ("tom")')
assert result_code == 0
// make a savepoint
db.savepoint('savepoint1')!
result_code = db.exec_none('insert into users (username) values ("kitty")')
assert result_code == 0
// rollback to `savepoint1`
db.rollback_to('savepoint1')!
result_code = db.exec_none('insert into users (username) values ("mars")')
assert result_code == 0
db.commit()!
response = db.exec_param_many('select * from users', [''])!
assert response == [
mysql.Row{
vals: ['1', 'jackson', '']
},
mysql.Row{
vals: ['2', 'shannon', '']
},
mysql.Row{
vals: ['3', 'bailey', '']
},
mysql.Row{
vals: ['4', 'blaze', '']
},
mysql.Row{
vals: ['5', 'Hi', '']
},
mysql.Row{
vals: ['6', 'tom', '']
},
mysql.Row{
vals: ['8', 'mars', '']
},
]
}
+293
View File
@@ -0,0 +1,293 @@
// vtest build: !(macos || windows)
import os
import db.sqlite
import db.mysql
import db.pg
// The goal of this example, is to show how you can connect to
// several different databases in the same program, and use both
// the ORM and the native connection wrapper, that each DB driver
// provides, if you need to execute more complex SQL queries.
//
// You can use environment variables to pass your local DB connection
// settings, without editing the code, like this:
//
// MUSER='myuser' MPASS='abc' MDATABASE='vtestdb' PGUSER='postgres' PGPASS='password' PGDATABASE='postgres' ./v -g run examples/database/orm.v
//
// WARNING: this example will drop and re-create any tables named:
// * modules
// * User
// * Parent
// * Child
// in the passed databases, so it is better to use empty DBs for it.
const mysql_host = os.getenv_opt('MHOST') or { 'localhost' }
const mysql_port = os.getenv_opt('MPORT') or { '3306' }.u32()
const mysql_user = os.getenv_opt('MUSER') or { 'myuser' }
const mysql_pass = os.getenv_opt('MPASS') or { 'abc' }
const mysql_db = os.getenv_opt('MDATABASE') or { 'test' }
const pg_host = os.getenv_opt('PGHOST') or { 'localhost' }
const pg_user = os.getenv_opt('PGUSER') or { 'test' }
const pg_pass = os.getenv_opt('PGPASS') or { 'abc' }
const pg_db = os.getenv_opt('PGDATABASE') or { 'test' }
@[table: 'modules']
struct Module {
id int @[primary; sql: serial]
name string
nr_downloads int @[sql: u64]
creator User
}
struct User {
id int @[primary; sql: serial]
age u32 @[unique: 'user']
name string @[sql: 'username'; sql_type: 'VARCHAR(200)'; unique]
is_customer bool @[sql: 'abc'; unique: 'user']
skipped_string string @[skip]
}
struct Parent {
id int @[primary; sql: serial]
name string
children []Child @[fkey: 'parent_id']
}
struct Child {
id int @[primary; sql: serial]
parent_id int
name string
}
fn sqlite3_array() ! {
eprintln('------------ ${@METHOD} -----------------')
mut db := sqlite.connect(':memory:')!
defer {
sql db {
drop table Parent
drop table Child
} or {}
db.close() or {}
}
sql db {
create table Parent
}!
sql db {
create table Child
}!
par := Parent{
name: 'test'
children: [
Child{
name: 'abc'
},
Child{
name: 'def'
},
]
}
sql db {
insert par into Parent
}!
parent := sql db {
select from Parent where id == 1
}!
eprintln(parent)
}
fn msql_array() ! {
eprintln('------------ ${@METHOD} -----------------')
mut db := mysql.connect(
host: mysql_host
port: mysql_port
username: mysql_user
password: mysql_pass
dbname: mysql_db
)!
defer {
sql db {
drop table Parent
} or {}
db.close() or {}
}
db.query('drop table if exists Parent')!
db.query('drop table if exists Child')!
sql db {
create table Parent
create table Child
}!
par := Parent{
name: 'test'
children: [
Child{
name: 'abc'
},
Child{
name: 'def'
},
]
}
sql db {
insert par into Parent
}!
parent := sql db {
select from Parent where id == 1
}!
eprintln(parent)
}
fn psql_array() ! {
eprintln('------------ ${@METHOD} -----------------')
mut db := pg.connect(host: pg_host, user: pg_user, password: pg_pass, dbname: pg_db)!
defer {
db.exec_one('drop table if exists "Parent", "Child"') or { eprintln(err) }
db.close() or {}
}
db.exec_one('drop table if exists "Parent", "Child"') or { eprintln(err) }
sql db {
create table Parent
create table Child
}!
par := Parent{
name: 'test'
children: [
Child{
name: 'abc'
},
Child{
name: 'def'
},
]
}
sql db {
insert par into Parent
}!
parent := sql db {
select from Parent where id == 1
}!
eprintln(parent)
}
fn sqlite3() ! {
eprintln('------------ ${@METHOD} -----------------')
mut db := sqlite.connect(':memory:')!
defer {
sql db {
drop table Module
drop table User
} or {}
db.close() or {}
}
sql db {
create table Module
}!
sql db {
create table User
}!
mod := Module{
name: 'test'
nr_downloads: 10
creator: User{
age: 21
name: 'VUser'
is_customer: true
}
}
sql db {
insert mod into Module
}!
modul := sql db {
select from Module where id == 1
}!
eprintln(modul)
}
fn msql() ! {
eprintln('------------ ${@METHOD} -----------------')
mut conn := mysql.connect(
host: mysql_host
port: mysql_port
username: mysql_user
password: mysql_pass
dbname: mysql_db
)!
defer {
conn.query('DROP TABLE IF EXISTS Module') or { eprintln(err) }
conn.query('DROP TABLE IF EXISTS User') or { eprintln(err) }
conn.close() or {}
}
conn.query('DROP TABLE IF EXISTS Module') or { eprintln(err) }
conn.query('DROP TABLE IF EXISTS User') or { eprintln(err) }
sql conn {
create table Module
}!
sql conn {
create table User
}!
mod := Module{
name: 'test'
nr_downloads: 10
creator: User{
age: 21
name: 'VUser'
is_customer: true
}
}
sql conn {
insert mod into Module
}!
m := sql conn {
select from Module where id == 1
}!
eprintln(m)
}
fn psql() ! {
eprintln('------------ ${@METHOD} -----------------')
mut db := pg.connect(host: pg_host, user: pg_user, password: pg_pass, dbname: pg_db)!
defer {
db.exec_one('drop table if exists "modules", "User"') or { eprintln(err) }
db.close() or {}
}
db.exec_one('drop table if exists "modules", "User"') or { eprintln(err) }
sql db {
create table Module
create table User
}!
mod := Module{
name: 'test'
nr_downloads: 10
creator: User{
age: 21
name: 'VUser'
is_customer: true
}
}
sql db {
insert mod into Module
}!
modul := sql db {
select from Module where id == 1
}!
sql db {
drop table Module
}!
eprintln(modul)
}
fn main() {
eprintln('------------ ${@METHOD} -----------------')
sqlite3_array()!
msql_array()!
psql_array()!
sqlite3()!
msql()!
psql()!
}
@@ -0,0 +1 @@
customer
+71
View File
@@ -0,0 +1,71 @@
// vtest build: linux
module main
import db.pg
struct Customer {
id int
name string
nr_orders int
country string
}
const dash = '----------------------------------------------------------------'
fn main() {
db := pg.connect(
host: 'localhost' // or '127.0.0.1'
user: 'postgres'
dbname: 'customerdb'
) or {
eprintln('failed to connect, error: ${err}')
return
}
nr_customers := sql db {
select count from Customer
}!
println('Total customers: ${nr_customers}')
println(dash)
bg_country := 'Bulgaria'
// V syntax can be used to build queries
bg_customers := sql 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 := sql 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 := sql db {
select from Customer where id == 1 limit 1
}!
println('Existing customer name: ${existing}[0].name')
println('Existing customer full information:')
println(existing)
println(dash)
q := Customer{}
// It's easy to handle queries that don't return any data
_ := sql db {
select from Customer where id == 12345 && name == q.name && nr_orders > q.nr_orders limit 1
}!
// Insert a new customer
nc := Customer{
name: 'John Doe'
nr_orders: 10
}
sql db {
insert nc into Customer
}!
}
+122
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
--
+21
View File
@@ -0,0 +1,21 @@
import db.sqlite
fn main() {
db := sqlite.connect(':memory:')!
db.exec("create table users (id integer primary key, name text default '');") or { panic(err) }
db.exec("insert into users (name) values ('Sam')")!
db.exec("insert into users (name) values ('Peter')")!
db.exec("insert into users (name) values ('Kate')")!
nr_users := db.q_int('select count(*) from users')!
println('nr users = ${nr_users}')
name := db.q_string('select name from users where id = 1')!
assert name == 'Sam'
users := db.exec('select * from users')!
for row in users {
println(row.vals)
}
}