Files
coder/database/query.sql
T
Kyle Carberry bd0293aff9 fix: Convert all jobs to use a common resource and agent type (#369)
* ci: Update DataDog GitHub branch to fallback to GITHUB_REF

This was detecting branches, but not our "main" branch before.
Hopefully this fixes it!

* Add basic Terraform Provider

* Rename post files to upload

* Add tests for resources

* Skip instance identity test

* Add tests for ensuring agent get's passed through properly

* Fix linting errors

* Add echo path

* Fix agent authentication

* fix: Convert all jobs to use a common resource and agent type

This enables a consistent API for project import and provisioned resources.
2022-02-28 18:00:52 +00:00

664 lines
9.9 KiB
SQL

-- Database queries are generated using sqlc. See:
-- https://docs.sqlc.dev/en/latest/tutorials/getting-started-postgresql.html
--
-- Run "make gen" to generate models and query functions.
;
-- Acquires the lock for a single job that isn't started, completed,
-- cancelled, and that matches an array of provisioner types.
--
-- SKIP LOCKED is used to jump over locked rows. This prevents
-- multiple provisioners from acquiring the same jobs. See:
-- https://www.postgresql.org/docs/9.5/sql-select.html#SQL-FOR-UPDATE-SHARE
-- name: AcquireProvisionerJob :one
UPDATE
provisioner_job
SET
started_at = @started_at,
updated_at = @started_at,
worker_id = @worker_id
WHERE
id = (
SELECT
id
FROM
provisioner_job AS nested
WHERE
nested.started_at IS NULL
AND nested.cancelled_at IS NULL
AND nested.completed_at IS NULL
AND nested.provisioner = ANY(@types :: provisioner_type [ ])
ORDER BY
nested.created_at FOR
UPDATE
SKIP LOCKED
LIMIT
1
) RETURNING *;
-- name: GetAPIKeyByID :one
SELECT
*
FROM
api_keys
WHERE
id = $1
LIMIT
1;
-- name: GetFileByHash :one
SELECT
*
FROM
file
WHERE
hash = $1
LIMIT
1;
-- name: GetUserByID :one
SELECT
*
FROM
users
WHERE
id = $1
LIMIT
1;
-- name: GetUserByEmailOrUsername :one
SELECT
*
FROM
users
WHERE
LOWER(username) = LOWER(@username)
OR email = @email
LIMIT
1;
-- name: GetUserCount :one
SELECT
COUNT(*)
FROM
users;
-- name: GetOrganizationByID :one
SELECT
*
FROM
organizations
WHERE
id = $1;
-- name: GetOrganizationByName :one
SELECT
*
FROM
organizations
WHERE
LOWER(name) = LOWER(@name)
LIMIT
1;
-- name: GetOrganizationsByUserID :many
SELECT
*
FROM
organizations
WHERE
id = (
SELECT
organization_id
FROM
organization_members
WHERE
user_id = $1
);
-- name: GetOrganizationMemberByUserID :one
SELECT
*
FROM
organization_members
WHERE
organization_id = $1
AND user_id = $2
LIMIT
1;
-- name: GetParameterValuesByScope :many
SELECT
*
FROM
parameter_value
WHERE
scope = $1
AND scope_id = $2;
-- name: GetProjectByID :one
SELECT
*
FROM
project
WHERE
id = $1
LIMIT
1;
-- name: GetProjectByOrganizationAndName :one
SELECT
*
FROM
project
WHERE
organization_id = @organization_id
AND LOWER(name) = LOWER(@name)
LIMIT
1;
-- name: GetProjectsByOrganizationIDs :many
SELECT
*
FROM
project
WHERE
organization_id = ANY(@ids :: text [ ]);
-- name: GetParameterSchemasByJobID :many
SELECT
*
FROM
parameter_schema
WHERE
job_id = $1;
-- name: GetProjectVersionsByProjectID :many
SELECT
*
FROM
project_version
WHERE
project_id = $1;
-- name: GetProjectVersionByProjectIDAndName :one
SELECT
*
FROM
project_version
WHERE
project_id = $1
AND name = $2;
-- name: GetProjectVersionByID :one
SELECT
*
FROM
project_version
WHERE
id = $1;
-- name: GetProvisionerLogsByIDBetween :many
SELECT
*
FROM
provisioner_job_log
WHERE
job_id = @job_id
AND (
created_at >= @created_after
OR created_at <= @created_before
)
ORDER BY
created_at;
-- name: GetProvisionerDaemonByID :one
SELECT
*
FROM
provisioner_daemon
WHERE
id = $1;
-- name: GetProvisionerDaemons :many
SELECT
*
FROM
provisioner_daemon;
-- name: GetProvisionerJobAgentByInstanceID :one
SELECT
*
FROM
provisioner_job_agent
WHERE
auth_instance_id = @auth_instance_id :: text
ORDER BY
created_at DESC;
-- name: GetProvisionerJobByID :one
SELECT
*
FROM
provisioner_job
WHERE
id = $1;
-- name: GetWorkspaceByID :one
SELECT
*
FROM
workspace
WHERE
id = $1
LIMIT
1;
-- name: GetWorkspacesByUserID :many
SELECT
*
FROM
workspace
WHERE
owner_id = $1;
-- name: GetWorkspaceByUserIDAndName :one
SELECT
*
FROM
workspace
WHERE
owner_id = @owner_id
AND LOWER(name) = LOWER(@name);
-- name: GetWorkspacesByProjectAndUserID :many
SELECT
*
FROM
workspace
WHERE
owner_id = $1
AND project_id = $2;
-- name: GetWorkspaceOwnerCountsByProjectIDs :many
SELECT
project_id,
COUNT(DISTINCT owner_id)
FROM
workspace
WHERE
project_id = ANY(@ids :: uuid [ ])
GROUP BY
project_id,
owner_id;
-- name: GetWorkspaceHistoryByID :one
SELECT
*
FROM
workspace_history
WHERE
id = $1
LIMIT
1;
-- name: GetWorkspaceHistoryByWorkspaceIDAndName :one
SELECT
*
FROM
workspace_history
WHERE
workspace_id = $1
AND name = $2;
-- name: GetWorkspaceHistoryByWorkspaceID :many
SELECT
*
FROM
workspace_history
WHERE
workspace_id = $1;
-- name: GetWorkspaceHistoryByWorkspaceIDWithoutAfter :one
SELECT
*
FROM
workspace_history
WHERE
workspace_id = $1
AND after_id IS NULL
LIMIT
1;
-- name: GetProvisionerJobResourceByID :one
SELECT
*
FROM
provisioner_job_resource
WHERE
id = $1;
-- name: GetProvisionerJobResourcesByJobID :many
SELECT
*
FROM
provisioner_job_resource
WHERE
job_id = $1;
-- name: GetProvisionerJobAgentsByResourceIDs :many
SELECT
*
FROM
provisioner_job_agent
WHERE
resource_id = ANY(@ids :: uuid [ ]);
-- name: InsertAPIKey :one
INSERT INTO
api_keys (
id,
hashed_secret,
user_id,
application,
name,
last_used,
expires_at,
created_at,
updated_at,
login_type,
oidc_access_token,
oidc_refresh_token,
oidc_id_token,
oidc_expiry,
devurl_token
)
VALUES
(
$1,
$2,
$3,
$4,
$5,
$6,
$7,
$8,
$9,
$10,
$11,
$12,
$13,
$14,
$15
) RETURNING *;
-- name: InsertFile :one
INSERT INTO
file (hash, created_at, created_by, mimetype, data)
VALUES
($1, $2, $3, $4, $5) RETURNING *;
-- name: InsertProvisionerJobLogs :many
INSERT INTO
provisioner_job_log
SELECT
unnest(@id :: uuid [ ]) AS id,
@job_id :: uuid AS job_id,
unnest(@created_at :: timestamptz [ ]) AS created_at,
unnest(@source :: log_source [ ]) as source,
unnest(@level :: log_level [ ]) as level,
unnest(@output :: varchar(1024) [ ]) as output RETURNING *;
-- name: InsertOrganization :one
INSERT INTO
organizations (id, name, description, created_at, updated_at)
VALUES
($1, $2, $3, $4, $5) RETURNING *;
-- name: InsertOrganizationMember :one
INSERT INTO
organization_members (
organization_id,
user_id,
created_at,
updated_at,
roles
)
VALUES
($1, $2, $3, $4, $5) RETURNING *;
-- name: InsertParameterValue :one
INSERT INTO
parameter_value (
id,
name,
created_at,
updated_at,
scope,
scope_id,
source_scheme,
source_value,
destination_scheme
)
VALUES
($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *;
-- name: InsertProject :one
INSERT INTO
project (
id,
created_at,
updated_at,
organization_id,
name,
provisioner,
active_version_id
)
VALUES
($1, $2, $3, $4, $5, $6, $7) RETURNING *;
-- name: InsertProvisionerJobResource :one
INSERT INTO
provisioner_job_resource (
id,
created_at,
job_id,
transition,
type,
name,
agent_id
)
VALUES
($1, $2, $3, $4, $5, $6, $7) RETURNING *;
-- name: InsertProjectVersion :one
INSERT INTO
project_version (
id,
project_id,
created_at,
updated_at,
name,
description,
import_job_id
)
VALUES
($1, $2, $3, $4, $5, $6, $7) RETURNING *;
-- name: InsertParameterSchema :one
INSERT INTO
parameter_schema (
id,
created_at,
job_id,
name,
description,
default_source_scheme,
default_source_value,
allow_override_source,
default_destination_scheme,
allow_override_destination,
default_refresh,
redisplay_value,
validation_error,
validation_condition,
validation_type_system,
validation_value_type
)
VALUES
(
$1,
$2,
$3,
$4,
$5,
$6,
$7,
$8,
$9,
$10,
$11,
$12,
$13,
$14,
$15,
$16
) RETURNING *;
-- name: InsertProvisionerDaemon :one
INSERT INTO
provisioner_daemon (id, created_at, name, provisioners)
VALUES
($1, $2, $3, $4) RETURNING *;
-- name: InsertProvisionerJob :one
INSERT INTO
provisioner_job (
id,
created_at,
updated_at,
organization_id,
initiator_id,
provisioner,
storage_method,
storage_source,
type,
input
)
VALUES
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING *;
-- name: InsertUser :one
INSERT INTO
users (
id,
email,
name,
login_type,
revoked,
hashed_password,
created_at,
updated_at,
username
)
VALUES
($1, $2, $3, $4, false, $5, $6, $7, $8) RETURNING *;
-- name: InsertWorkspace :one
INSERT INTO
workspace (
id,
created_at,
updated_at,
owner_id,
project_id,
name
)
VALUES
($1, $2, $3, $4, $5, $6) RETURNING *;
-- name: InsertProvisionerJobAgent :one
INSERT INTO
provisioner_job_agent (
id,
created_at,
updated_at,
resource_id,
auth_token,
auth_instance_id,
environment_variables,
startup_script,
instance_metadata,
resource_metadata
)
VALUES
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING *;
-- name: InsertWorkspaceHistory :one
INSERT INTO
workspace_history (
id,
created_at,
updated_at,
workspace_id,
project_version_id,
before_id,
name,
transition,
initiator,
provision_job_id,
provisioner_state
)
VALUES
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) RETURNING *;
-- name: UpdateAPIKeyByID :exec
UPDATE
api_keys
SET
last_used = $2,
expires_at = $3,
oidc_access_token = $4,
oidc_refresh_token = $5,
oidc_expiry = $6
WHERE
id = $1;
-- name: UpdateProvisionerDaemonByID :exec
UPDATE
provisioner_daemon
SET
updated_at = $2,
provisioners = $3
WHERE
id = $1;
-- name: UpdateProvisionerJobByID :exec
UPDATE
provisioner_job
SET
updated_at = $2
WHERE
id = $1;
-- name: UpdateProvisionerJobWithCompleteByID :exec
UPDATE
provisioner_job
SET
updated_at = $2,
completed_at = $3,
cancelled_at = $4,
error = $5
WHERE
id = $1;
-- name: UpdateWorkspaceHistoryByID :exec
UPDATE
workspace_history
SET
updated_at = $2,
after_id = $3,
provisioner_state = $4
WHERE
id = $1;