Skip to main content

Object Dependencies with depends_on

The depends_on parameter defines explicit dependencies between SOLE-managed objects, ensuring they are created in the correct order.

Overview

When objects depend on other objects, SOLE must create them in the proper sequence. For example:

  • Functions that call other functions
  • Views that reference tables or other views
  • Any object that references another SOLE-managed object

The depends_on parameter ensures dependent objects are created only after their dependencies exist.

Syntax

depends_on:
- rel(object_type.object_name)
- rel(object_type.object_name)

Key Features

Explicit Dependency Declaration

  • Define dependencies using the rel(object_type.name) syntax
  • Support multiple dependencies per object
  • Dependencies must reference other SOLE-managed objects

Automatic Dependency Resolution

  • Objects in depends_on are added to the generated HCL dependencies list
  • SOLE ensures proper creation order based on the dependency graph

Dependency Validation

  • Objects in depends_on are added to the generated HCL dependencies list
  • SOLE ensures proper creation order based on the dependency graph
warning

SOLE enforces dependency constraints:

  • Cyclic Dependencies: SOLE prevents circular dependencies and will fail if detected
  • Hierarchy Validation: Dependencies must respect SOLE's object hierarchy (Account-level objects cannot depend on Database-level or Schema-level objects)

Examples

Basic Function Dependency

- function:
name: FUNCTION_1
database: rel(database.MY_DB)
schema: rel(schema.MY_SCHEMA)
comment: "Function 1"
language: javascript
return_type: VARCHAR
return_behavior: IMMUTABLE
null_input_behavior: "RETURNS NULL ON NULL INPUT"
statement: "return 1"
arguments:
ARG_1:
type: VARCHAR
ARG_2:
type: DATE
arg_3:
type: DATE

- function:
name: FUNCTION_2
database: rel(database.MY_DB)
schema: rel(schema.MY_SCHEMA)
comment: "Function 2"
language: javascript
return_type: VARCHAR
return_behavior: IMMUTABLE
null_input_behavior: "RETURNS NULL ON NULL INPUT"
statement: "return 1"
arguments:
ARG_1:
type: VARCHAR
ARG_2:
type: VARCHAR
arg_3:
type: DATE
depends_on:
- rel(function.FUNCTION_1)

Multiple Dependencies

- function:
name: FUNCTION_1
database: rel(database.MY_DB)
schema: rel(schema.MY_SCHEMA)
comment: "Function 1"
language: javascript
return_type: VARCHAR
return_behavior: IMMUTABLE
null_input_behavior: "RETURNS NULL ON NULL INPUT"
statement: "return 1"
arguments:
ARG_1:
type: VARCHAR
ARG_2:
type: DATE
arg_3:
type: DATE

- function:
name: FUNCTION_2
database: rel(database.MY_DB)
schema: rel(schema.MY_SCHEMA)
comment: "Function 2"
language: javascript
return_type: VARCHAR
return_behavior: IMMUTABLE
null_input_behavior: "RETURNS NULL ON NULL INPUT"
statement: "return 1"
arguments:
ARG_1:
type: VARCHAR
ARG_2:
type: VARCHAR
arg_3:
type: DATE
depends_on:
- rel(function.FUNCTION_1)

- function:
name: FUNCTION_3
database: rel(database.MY_DB)
schema: rel(schema.MY_SCHEMA)
comment: "Function 3"
language: javascript
return_type: VARCHAR
return_behavior: IMMUTABLE
null_input_behavior: "RETURNS NULL ON NULL INPUT"
statement: "return 1"
arguments:
ARG_1:
type: DATE
ARG_2:
type: DATE
arg_3:
type: DATE
depends_on:
- rel(function.FUNCTION_1)
- rel(function.FUNCTION_2)

View Dependencies

- table:
name: CUSTOMERS
database: rel(database.MY_DB)
schema: rel(schema.MY_SCHEMA)
columns:
ID:
type: NUMBER
NAME:
type: VARCHAR

- view:
name: CUSTOMER_VIEW
database: rel(database.MY_DB)
schema: rel(schema.MY_SCHEMA)
statement: "SELECT * FROM rel(table.CUSTOMERS)"
depends_on:
- rel(table.CUSTOMERS)

Cross-Object Type Dependencies

- function:
name: HELPER_FUNC
database: rel(database.MY_DB)
schema: rel(schema.MY_SCHEMA)
return_type: NUMBER
statement: "return 100"

- procedure:
name: procedure
database: rel(database.MY_DB)
schema: rel(schema.MY_SCHEMA)
return_type: VARCHAR
statement: "return 100"
depends_on:
- rel(function.HELPER_FUNC)

Dependency Rules

Supported Object Types

The depends_on parameter supports dependencies between any SOLE-managed object types.

Hierarchy Constraints

Dependencies must respect SOLE's object hierarchy:

  • Account-level objects cannot depend on Database-level or Schema-level objects
  • Database-level objects can depend on Account-level objects
  • Schema-level objects can depend on Account-level and Database-level objects

Validation Rules

  1. Cyclic Dependencies: SOLE detects and rejects circular dependencies
  2. Proper Syntax: Dependencies must use the rel(object_type.name) format

Error Handling

Cyclic Dependency Detection

SOLE detects circular dependencies and fails with an error indicating the objects involved.

# This causes a cyclic dependency error
- function:
name: FUNC_A
depends_on:
- rel(function.FUNC_B)

- function:
name: FUNC_B
depends_on:
- rel(function.FUNC_A)

Invalid Hierarchy Dependencies

SOLE rejects dependencies that violate the object hierarchy.

# This causes a hierarchy violation error
- account:
name: MY_ACCOUNT
depends_on:
- rel(database.MY_DB) # Account cannot depend on Database

Best Practices

  1. Minimize Dependencies: Only declare necessary dependencies
  2. Clear Naming: Use descriptive object names
  3. Documentation: Comment complex dependency relationships
  4. Testing: Test configurations in development before production