# sqlc is used to generate types from sql schema language. # It was chosen to ensure type-safety when interacting with # the database. version: "2" cloud: # This is the static ID for the coder project. project: "01HEP08N3WKWRFZT3ZZ9Q37J8X" sql: - schema: "./dump.sql" queries: "./queries" engine: "postgresql" # This only works if you are running a local postgres database with the # schema loaded and migrations run. Run `make sqlc-vet` to run the linter. database: uri: "${SQLC_DATABASE_URL}" analyzer: database: false rules: - sqlc/db-prepare - do-not-use-public-schema-in-queries gen: go: package: "database" out: "./queries" emit_interface: true emit_json_tags: true emit_db_tags: true emit_enum_valid_method: true emit_all_enum_values: true overrides: - column: "api_keys.scopes" go_type: type: "APIKeyScopes" - column: "api_keys.allow_list" go_type: type: "AllowList" - db_type: "agent_id_name_pair" go_type: type: "AgentIDNamePair" # Used in 'CustomRoles' query to filter by (name,organization_id) - db_type: "name_organization_pair" go_type: type: "NameOrganizationPair" - db_type: "tagset" go_type: type: "StringMap" - column: "custom_roles.site_permissions" go_type: type: "CustomRolePermissions" - column: "custom_roles.org_permissions" go_type: type: "CustomRolePermissions" - column: "custom_roles.user_permissions" go_type: type: "CustomRolePermissions" - column: "custom_roles.member_permissions" go_type: type: "CustomRolePermissions" - column: "provisioner_daemons.tags" go_type: type: "StringMap" - column: "provisioner_keys.tags" go_type: type: "StringMap" - column: "provisioner_jobs.tags" go_type: type: "StringMap" - column: "chats.labels" go_type: type: "StringMap" - column: "chats_expanded.labels" go_type: type: "StringMap" - column: "chats.user_acl" go_type: type: "ChatACL" - column: "chats.group_acl" go_type: type: "ChatACL" - column: "chats_expanded.user_acl" go_type: type: "ChatACL" - column: "chats_expanded.group_acl" go_type: type: "ChatACL" - column: "users.rbac_roles" go_type: "github.com/lib/pq.StringArray" - column: "templates.user_acl" go_type: type: "TemplateACL" - column: "templates.group_acl" go_type: type: "TemplateACL" - column: "template_with_names.user_acl" go_type: type: "TemplateACL" - column: "template_with_names.group_acl" go_type: type: "TemplateACL" - column: "template_usage_stats.app_usage_mins" go_type: type: "StringMapOfInt" - column: "tasks_with_status.workspace_user_acl" go_type: type: "WorkspaceACL" - column: "tasks_with_status.workspace_group_acl" go_type: type: "WorkspaceACL" - column: "workspaces.user_acl" go_type: type: "WorkspaceACL" - column: "workspaces.group_acl" go_type: type: "WorkspaceACL" - column: "workspaces_expanded.user_acl" go_type: type: "WorkspaceACL" - column: "workspaces_expanded.group_acl" go_type: type: "WorkspaceACL" - column: "workspaces_expanded.user_acl_display_info" go_type: type: "WorkspaceACLDisplayInfo" - column: "workspaces_expanded.group_acl_display_info" go_type: type: "WorkspaceACLDisplayInfo" - column: "notification_templates.actions" go_type: type: "[]byte" - column: "notification_messages.payload" go_type: type: "[]byte" - column: "provisioner_job_stats.*_secs" go_type: type: "float64" - column: "user_links.claims" go_type: type: "UserLinkClaims" # Workaround for sqlc not interpreting the left join correctly. - column: "tasks_with_status.workspace_build_number" go_type: "database/sql.NullInt32" - column: "tasks_with_status.status" go_type: type: "TaskStatus" - column: "tasks_with_status.workspace_agent_lifecycle_state" go_type: type: "NullWorkspaceAgentLifecycleState" - column: "tasks_with_status.workspace_app_health" go_type: type: "NullWorkspaceAppHealth" # Workaround for sqlc not interpreting the left join correctly # in the combined telemetry query. - column: "task_event_data.start_build_number" go_type: "database/sql.NullInt32" - column: "task_event_data.stop_build_created_at" go_type: "database/sql.NullTime" - column: "task_event_data.stop_build_reason" go_type: type: "NullBuildReason" - column: "task_event_data.start_build_created_at" go_type: "database/sql.NullTime" - column: "task_event_data.start_build_reason" go_type: type: "NullBuildReason" - column: "task_event_data.last_working_status_at" go_type: "database/sql.NullTime" - column: "task_event_data.first_status_after_resume_at" go_type: "database/sql.NullTime" - db_type: "pg_catalog.numeric" go_type: import: "github.com/shopspring/decimal" type: "Decimal" package: "decimal" - db_type: "pg_catalog.numeric" nullable: true go_type: import: "github.com/shopspring/decimal" type: "NullDecimal" package: "decimal" rename: chat: ChatTable chats_expanded: Chat group_member: GroupMemberTable group_members_expanded: GroupMember template: TemplateTable template_with_name: Template workspace_build: WorkspaceBuildTable workspace_build_with_user: WorkspaceBuild workspace: WorkspaceTable workspaces_expanded: Workspace task: TaskTable tasks_with_status: Task template_version: TemplateVersionTable template_version_with_user: TemplateVersion api_key: APIKey api_key_scope: APIKeyScope api_key_scope_all: APIKeyScopeAll api_key_scope_application_connect: APIKeyScopeApplicationConnect api_version: APIVersion avatar_url: AvatarURL created_by_avatar_url: CreatedByAvatarURL diff_url: DiffURL dbcrypt_key: DBCryptKey session_count_vscode: SessionCountVSCode session_count_jetbrains: SessionCountJetBrains session_count_reconnecting_pty: SessionCountReconnectingPTY session_count_ssh: SessionCountSSH connection_median_latency_ms: ConnectionMedianLatencyMS login_type_oidc: LoginTypeOIDC oauth_access_token: OAuthAccessToken oauth_access_token_key_id: OAuthAccessTokenKeyID oauth_expiry: OAuthExpiry oauth_id_token: OAuthIDToken oauth_refresh_token: OAuthRefreshToken oauth_refresh_token_key_id: OAuthRefreshTokenKeyID oauth_extra: OAuthExtra parameter_type_system_hcl: ParameterTypeSystemHCL userstatus: UserStatus gitsshkey: GitSSHKey rbac_roles: RBACRoles ip_address: IPAddress ip_addresses: IPAddresses ids: IDs jwt: JWT user_acl: UserACL group_acl: GroupACL workspace_user_acl: WorkspaceUserACL workspace_group_acl: WorkspaceGroupACL user_acl_display_info: UserACLDisplayInfo group_acl_display_info: GroupACLDisplayInfo troubleshooting_url: TroubleshootingURL default_ttl: DefaultTTL motd_file: MOTDFile uuid: UUID failure_ttl: FailureTTL time_til_dormant_autodelete: TimeTilDormantAutoDelete eof: EOF template_ids: TemplateIDs active_user_ids: ActiveUserIDs display_app_ssh_helper: DisplayAppSSHHelper oauth2_provider_app: OAuth2ProviderApp oauth2_provider_app_secret: OAuth2ProviderAppSecret oauth2_provider_app_code: OAuth2ProviderAppCode oauth2_provider_app_token: OAuth2ProviderAppToken api_key_id: APIKeyID callback_url: CallbackURL login_type_oauth2_provider_app: LoginTypeOAuth2ProviderApp crypto_key_feature_workspace_apps_api_key: CryptoKeyFeatureWorkspaceAppsAPIKey crypto_key_feature_oidc_convert: CryptoKeyFeatureOIDCConvert stale_interval_ms: StaleIntervalMS has_ai_task: HasAITask ai_task_sidebar_app_id: AITaskSidebarAppID latest_build_has_ai_task: LatestBuildHasAITask cors_behavior: CorsBehavior aibridge_interception: AIBridgeInterception aibridge_tool_usage: AIBridgeToolUsage aibridge_token_usage: AIBridgeTokenUsage aibridge_user_prompt: AIBridgeUserPrompt aibridge_model_thought: AIBridgeModelThought ai_provider: AIProvider ai_provider_key: AIProviderKey ai_provider_type: AIProviderType resource_type_ai_provider: ResourceTypeAIProvider resource_type_ai_provider_key: ResourceTypeAIProviderKey mcp_server_config: MCPServerConfig mcp_server_configs: MCPServerConfigs mcp_server_user_token: MCPServerUserToken mcp_server_user_tokens: MCPServerUserTokens mcp_server_tool_snapshot: MCPServerToolSnapshot mcp_server_tool_snapshots: MCPServerToolSnapshots mcp_server_config_id: MCPServerConfigID mcp_server_ids: MCPServerIDs max_file_links: MaxFileLinks icon_url: IconURL oauth2_client_id: OAuth2ClientID oauth2_client_secret: OAuth2ClientSecret oauth2_client_secret_key_id: OAuth2ClientSecretKeyID oauth2_auth_url: OAuth2AuthURL oauth2_token_url: OAuth2TokenURL oauth2_scopes: OAuth2Scopes api_key_header: APIKeyHeader api_key_value: APIKeyValue api_key_value_key_id: APIKeyValueKeyID custom_headers_key_id: CustomHeadersKeyID tools_json: ToolsJSON access_token_key_id: AccessTokenKeyID refresh_token_key_id: RefreshTokenKeyID rules: - name: do-not-use-public-schema-in-queries message: "do not use public schema in queries" # FIXME: It would be great to run sqlc-vet against `migrations` directory and `dump.sql`. rule: > query.sql.matches(r'[^a-z]public\.')