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_onare added to the generated HCL dependencies list - SOLE ensures proper creation order based on the dependency graph
 
Dependency Validation
- Objects in 
depends_onare 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
- Cyclic Dependencies: SOLE detects and rejects circular dependencies
 - 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
- Minimize Dependencies: Only declare necessary dependencies
 - Clear Naming: Use descriptive object names
 - Documentation: Comment complex dependency relationships
 - Testing: Test configurations in development before production