update examples
This commit is contained in:
parent
5833ce206a
commit
cc645ec764
|
@ -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 *;
|
||||
|
|
|
@ -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
22
main.go
|
@ -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",
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue