use composite key for talkgroups
This commit is contained in:
parent
57449e99a0
commit
20c21beca9
4 changed files with 29 additions and 19 deletions
|
@ -63,16 +63,16 @@ type System struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Talkgroup struct {
|
type Talkgroup struct {
|
||||||
ID int32
|
|
||||||
System int32
|
System int32
|
||||||
|
Tgid int32
|
||||||
Name pgtype.Text
|
Name pgtype.Text
|
||||||
Frequency pgtype.Int4
|
Frequency pgtype.Int4
|
||||||
Tgid int32
|
|
||||||
AutoCreated pgtype.Bool
|
AutoCreated pgtype.Bool
|
||||||
Metadata []byte
|
Metadata []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
type TalkgroupsTag struct {
|
type TalkgroupsTag struct {
|
||||||
|
SystemID int32
|
||||||
TalkgroupID int32
|
TalkgroupID int32
|
||||||
Tags []string
|
Tags []string
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,23 +22,28 @@ func (q *Queries) GetTalkgroupTags(ctx context.Context, talkgroupID int32) ([]st
|
||||||
}
|
}
|
||||||
|
|
||||||
const getTalkgroupsWithAllTags = `-- name: GetTalkgroupsWithAllTags :many
|
const getTalkgroupsWithAllTags = `-- name: GetTalkgroupsWithAllTags :many
|
||||||
SELECT talkgroup_id FROM talkgroups_tags
|
SELECT system_id, talkgroup_id FROM talkgroups_tags
|
||||||
WHERE tags && ARRAY[$1]
|
WHERE tags && ARRAY[$1]
|
||||||
`
|
`
|
||||||
|
|
||||||
func (q *Queries) GetTalkgroupsWithAllTags(ctx context.Context, tags []string) ([]int32, error) {
|
type GetTalkgroupsWithAllTagsRow struct {
|
||||||
|
SystemID int32
|
||||||
|
TalkgroupID int32
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) GetTalkgroupsWithAllTags(ctx context.Context, tags []string) ([]GetTalkgroupsWithAllTagsRow, error) {
|
||||||
rows, err := q.db.Query(ctx, getTalkgroupsWithAllTags, tags)
|
rows, err := q.db.Query(ctx, getTalkgroupsWithAllTags, tags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
var items []int32
|
var items []GetTalkgroupsWithAllTagsRow
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var talkgroup_id int32
|
var i GetTalkgroupsWithAllTagsRow
|
||||||
if err := rows.Scan(&talkgroup_id); err != nil {
|
if err := rows.Scan(&i.SystemID, &i.TalkgroupID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
items = append(items, talkgroup_id)
|
items = append(items, i)
|
||||||
}
|
}
|
||||||
if err := rows.Err(); err != nil {
|
if err := rows.Err(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -47,23 +52,28 @@ func (q *Queries) GetTalkgroupsWithAllTags(ctx context.Context, tags []string) (
|
||||||
}
|
}
|
||||||
|
|
||||||
const getTalkgroupsWithAnyTags = `-- name: GetTalkgroupsWithAnyTags :many
|
const getTalkgroupsWithAnyTags = `-- name: GetTalkgroupsWithAnyTags :many
|
||||||
SELECT talkgroup_id FROM talkgroups_tags
|
SELECT system_id, talkgroup_id FROM talkgroups_tags
|
||||||
WHERE tags @> ARRAY[$1]
|
WHERE tags @> ARRAY[$1]
|
||||||
`
|
`
|
||||||
|
|
||||||
func (q *Queries) GetTalkgroupsWithAnyTags(ctx context.Context, tags []string) ([]int32, error) {
|
type GetTalkgroupsWithAnyTagsRow struct {
|
||||||
|
SystemID int32
|
||||||
|
TalkgroupID int32
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) GetTalkgroupsWithAnyTags(ctx context.Context, tags []string) ([]GetTalkgroupsWithAnyTagsRow, error) {
|
||||||
rows, err := q.db.Query(ctx, getTalkgroupsWithAnyTags, tags)
|
rows, err := q.db.Query(ctx, getTalkgroupsWithAnyTags, tags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
var items []int32
|
var items []GetTalkgroupsWithAnyTagsRow
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var talkgroup_id int32
|
var i GetTalkgroupsWithAnyTagsRow
|
||||||
if err := rows.Scan(&talkgroup_id); err != nil {
|
if err := rows.Scan(&i.SystemID, &i.TalkgroupID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
items = append(items, talkgroup_id)
|
items = append(items, i)
|
||||||
}
|
}
|
||||||
if err := rows.Err(); err != nil {
|
if err := rows.Err(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -26,21 +26,21 @@ CREATE TABLE IF NOT EXISTS systems(
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS talkgroups(
|
CREATE TABLE IF NOT EXISTS talkgroups(
|
||||||
id INTEGER NOT NULL,
|
|
||||||
system INTEGER REFERENCES systems(id) NOT NULL,
|
system INTEGER REFERENCES systems(id) NOT NULL,
|
||||||
|
tgid INTEGER,
|
||||||
name TEXT,
|
name TEXT,
|
||||||
frequency INTEGER,
|
frequency INTEGER,
|
||||||
tgid INTEGER,
|
|
||||||
auto_created BOOLEAN,
|
auto_created BOOLEAN,
|
||||||
metadata JSONB,
|
metadata JSONB,
|
||||||
PRIMARY KEY (tgid, system)
|
PRIMARY KEY (tgid, system)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS talkgroups_tags(
|
CREATE TABLE IF NOT EXISTS talkgroups_tags(
|
||||||
|
system_id INTEGER NOT NULL REFERENCES systems(id),
|
||||||
talkgroup_id INTEGER NOT NULL REFERENCES talkgroups(id),
|
talkgroup_id INTEGER NOT NULL REFERENCES talkgroups(id),
|
||||||
tags TEXT[] NOT NULL DEFAULT '{}'
|
tags TEXT[] NOT NULL DEFAULT '{}'
|
||||||
);
|
);
|
||||||
CREATE UNIQUE INDEX IF NOT EXISTS talkgroups_tags_id_talkgroup_id ON talkgroups_tags(talkgroup_id);
|
CREATE UNIQUE INDEX IF NOT EXISTS talkgroups_tags_id_talkgroup_id ON talkgroups_tags(system_id, talkgroup_id);
|
||||||
CREATE INDEX IF NOT EXISTS talkgroup_tags_id_tags ON talkgroups_tags USING GIN (tags);
|
CREATE INDEX IF NOT EXISTS talkgroup_tags_id_tags ON talkgroups_tags USING GIN (tags);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS calls(
|
CREATE TABLE IF NOT EXISTS calls(
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
-- name: GetTalkgroupsWithAnyTags :many
|
-- name: GetTalkgroupsWithAnyTags :many
|
||||||
SELECT talkgroup_id FROM talkgroups_tags
|
SELECT system_id, talkgroup_id FROM talkgroups_tags
|
||||||
WHERE tags @> ARRAY[$1];
|
WHERE tags @> ARRAY[$1];
|
||||||
|
|
||||||
-- name: GetTalkgroupsWithAllTags :many
|
-- name: GetTalkgroupsWithAllTags :many
|
||||||
SELECT talkgroup_id FROM talkgroups_tags
|
SELECT system_id, talkgroup_id FROM talkgroups_tags
|
||||||
WHERE tags && ARRAY[$1];
|
WHERE tags && ARRAY[$1];
|
||||||
|
|
||||||
-- name: GetTalkgroupTags :one
|
-- name: GetTalkgroupTags :one
|
||||||
|
|
Loading…
Reference in a new issue