update examples

This commit is contained in:
Dawid Wysokiński 2023-08-30 07:23:41 +02:00
parent 5833ce206a
commit cc645ec764
Signed by: Kichiyaki
GPG Key ID: B5445E357FB8B892
4 changed files with 79 additions and 8 deletions

View File

@ -2,6 +2,7 @@
-- https://docs.sqlc.dev/en/latest/howto/named_parameters.html
-- https://docs.sqlc.dev/en/latest/howto/insert.html
-- https://dev.to/forbeslindesay/postgres-unnest-cheat-sheet-for-bulk-operations-1obg
-- name: CreateOrUpdateServers :many
INSERT INTO servers (key, url, open, version_code, config, building_info, unit_info)
VALUES (UNNEST(@key::varchar(100)[]), UNNEST(@url::varchar(255)[]), UNNEST(@open::boolean[]),
@ -15,6 +16,7 @@ ON CONFLICT ON CONSTRAINT servers_pkey DO UPDATE SET url = EXCLUDED.url,
RETURNING *;
-- https://docs.sqlc.dev/en/latest/howto/select.html
-- https://docs.sqlc.dev/en/stable/reference/changelog.html#sqlc-embed
-- name: ListServers :many
SELECT sqlc.embed(server), sqlc.embed(version)
from servers server
@ -35,10 +37,7 @@ LIMIT @pag_limit OFFSET @pag_offset;
-- https://docs.sqlc.dev/en/latest/howto/query_count.html
-- name: CountServersByVersionCode :many
SELECT version_code, count(key)
FROM servers server
GROUP BY version_code
ORDER BY version_code ASC;
SELECT version_code::varchar, cnt::bigint from count_servers_by_version_code() res;
-- https://docs.sqlc.dev/en/latest/howto/update.html
-- name: UpdateServer :one
@ -47,3 +46,7 @@ SET
config = coalesce(sqlc.narg('open'), open)
WHERE key = sqlc.arg('key')
RETURNING *;
-- https://docs.sqlc.dev/en/stable/howto/delete.html
-- name: DeleteServer :one
DELETE FROM servers WHERE key IN (SELECT key FROM servers WHERE player_data_updated_at IS NULL LIMIT 1) RETURNING *;

View File

@ -3,7 +3,9 @@
-- https://docs.sqlc.dev/en/latest/howto/insert.html
-- name: CreateVersion :one
INSERT INTO versions (code, name, host, timezone) VALUES ($1, $2, $3, $4) RETURNING *;
INSERT INTO versions (code, name, host, timezone)
VALUES ($1, $2, $3, $4)
RETURNING *;
-- https://docs.sqlc.dev/en/latest/howto/select.html
-- name: ListVersions :many
@ -11,6 +13,15 @@ SELECT *
from versions
ORDER BY code ASC;
-- https://docs.sqlc.dev/en/latest/howto/select.html
-- name: ListVersionsWithServerCount :many
SELECT sqlc.embed(v), count_servers(v.version_code) as cnt
from versions v
ORDER BY v.code ASC;
-- https://docs.sqlc.dev/en/latest/howto/select.html
-- name: GetVersion :one
SELECT * from versions WHERE code = $1 LIMIT 1;
SELECT *
from versions
WHERE code = $1
LIMIT 1;

22
main.go
View File

@ -24,7 +24,7 @@ const envPostgresConnString = "POSTGRES_CONNECTION_STRING"
func main() {
var demoName string
flag.StringVar(&demoName, "demo", "listVersions", "one of: listVersions, listOpenServers, createVersionAndServers, countServersByVersionCode")
flag.StringVar(&demoName, "demo", "listVersions", "one of: listVersions, listOpenServers, createVersionAndServers, countServersByVersionCode, deleteServer")
flag.Parse()
@ -95,6 +95,8 @@ func (d demo) run(name string) error {
return d.createVersionAndServers()
case "countServersByVersionCode":
return d.countServersByVersionCode()
case "deleteServer":
return d.deleteServer()
default:
return errors.New("unknown demo")
}
@ -193,12 +195,28 @@ func (d demo) countServersByVersionCode() error {
}
for _, r := range rows {
fmt.Printf("Version: %s\nCount: %d\n", r.VersionCode, r.Count)
fmt.Printf("Version: %s\nCount: %d\n", r.VersionCode, r.Cnt)
}
return nil
}
func (d demo) deleteServer() error {
s, err := d.queries.DeleteServer(context.Background())
if err != nil {
return fmt.Errorf("couldn't delete server: %w", err)
}
v, err := d.queries.GetVersion(context.Background(), s.VersionCode)
if err != nil {
return err
}
printServer(s, v)
return nil
}
func printServer(s internal.Server, v internal.Version) {
fmt.Printf(
"---%s---\nOpen: %v\nConfig: %v\nBuildingInfo: %v\nUnit info: %v\nCreated at: %s\nVersion: %s (%s)\n",

View File

@ -0,0 +1,39 @@
-- +goose Up
-- +goose StatementBegin
create function count_servers(ver_code varchar)
returns bigint
language plpgsql
as
$$
declare
cnt bigint;
begin
select count(*)
into cnt
from servers
where version_code = ver_code;
return cnt;
end;
$$;
create function count_servers_by_version_code()
returns table(version_code varchar, cnt bigint)
language plpgsql
as
$$
begin
return query
SELECT server.version_code, count(server.key) cnt
FROM servers server
GROUP BY server.version_code
ORDER BY server.version_code ASC;
end;
$$;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
drop function count_servers(ver_code varchar);
drop function count_servers_by_version_code();
-- +goose StatementEnd