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
- 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