Skip to content

Commit c4d3718

Browse files
committed
fix(snowflake): correct SQL generation, transport, and param conventions
Address defects found by validation against the Snowflake SQL API v2 and SQL reference docs. SQL generation: - lift PARSE_JSON out of the VALUES clause into a projecting SELECT; the previous form is rejected for any object or array value - escape backslashes as well as quotes in string literals, closing a COPY option injection through the user-or-llm stagePath and pattern fields - reject "--" in stage paths, which commented out every following clause - emit COPY INTO clauses in the documented positional order - exclude only view types in introspect_schema so temporary, external, and event tables are visible - use plain equality in MERGE and reject null or duplicate match keys - bound rows and bound-value bytes for every statement, measured in UTF-8 - reject qualified task names, which TASK_HISTORY silently ignores - replace a raw NUL byte in the source with its escape sequence Transport: - read DML stats from the documented top-level ResultSet property - drop Link-header and 391908 paging, which belong to the retired API, and report partition completeness as unknown rather than falsely complete - require a 2xx status before trusting a success SQLSTATE - cap response bodies and fail closed on invalid session context names Conventions: - inline shared params into each tool instead of cross-file spreads, which also lets the docs generator emit host and apiKey - use the official Snowflake brand mark on a white tile
1 parent 22fde60 commit c4d3718

33 files changed

Lines changed: 2020 additions & 376 deletions

apps/docs/components/icons.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8555,10 +8555,11 @@ export function BigQueryIcon(props: SVGProps<SVGSVGElement>) {
85558555

85568556
export function SnowflakeIcon(props: SVGProps<SVGSVGElement>) {
85578557
return (
8558-
<svg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' {...props}>
8558+
<svg viewBox='0 0 146.36 139.16' xmlns='http://www.w3.org/2000/svg' {...props}>
85598559
<path
85608560
fill='#29B5E8'
8561-
d='M12 2a1 1 0 0 1 1 1v3.59l2.3-2.3a1 1 0 1 1 1.4 1.42L13 9.41V12h2.6l3.7-3.7a1 1 0 0 1 1.4 1.4L18.42 12H22a1 1 0 1 1 0 2h-3.59l2.3 2.3a1 1 0 0 1-1.4 1.4L15.58 14H13v2.59l3.7 3.7a1 1 0 1 1-1.4 1.4L13 19.42V23a1 1 0 1 1-2 0v-3.58l-2.3 2.3a1 1 0 1 1-1.4-1.4l3.7-3.71V14H8.4l-3.7 3.7a1 1 0 0 1-1.4-1.4L5.58 14H2a1 1 0 0 1 0-2h3.59l-2.3-2.3a1 1 0 0 1 1.4-1.4L8.42 12H11V9.41L7.3 5.71a1 1 0 1 1 1.4-1.42l2.3 2.3V3a1 1 0 0 1 1-1Z'
8561+
fillRule='evenodd'
8562+
d='M134.81,60.1l-16.47,9.49L134.81,79a8.65,8.65,0,1,1-8.67,15l-29.51-17a8.68,8.68,0,0,1-4.33-7.75,8.48,8.48,0,0,1,.31-2,8.68,8.68,0,0,1,4-5.19l29.51-16.94A8.69,8.69,0,0,1,138,48.31,8.58,8.58,0,0,1,134.81,60.1Zm-15.59,46L89.72,89.13a8.72,8.72,0,0,0-13.06,7.48v33.9a8.69,8.69,0,0,0,17.37,0v-19L110.54,121a8.66,8.66,0,1,0,8.68-15Zm-34-33.16L72.92,85.09a2.44,2.44,0,0,1-1.54.65H67.77a2.51,2.51,0,0,1-1.54-.65L54,72.9a2.45,2.45,0,0,1-.64-1.52v-3.6A2.5,2.5,0,0,1,54,66.25L66.23,54.06a2.5,2.5,0,0,1,1.54-.64h3.61a2.45,2.45,0,0,1,1.54.64L85.18,66.25a2.49,2.49,0,0,1,.63,1.53v3.6A2.44,2.44,0,0,1,85.18,72.9Zm-9.8-3.38A2.59,2.59,0,0,0,74.73,68l-3.55-3.51a2.51,2.51,0,0,0-1.54-.64h-.13a2.46,2.46,0,0,0-1.53.64L64.43,68a2.51,2.51,0,0,0-.63,1.55v.13a2.41,2.41,0,0,0,.63,1.52L68,74.7a2.48,2.48,0,0,0,1.53.64h.13a2.51,2.51,0,0,0,1.54-.64l3.55-3.53a2.49,2.49,0,0,0,.65-1.52ZM19.93,33.08,49.44,50a8.73,8.73,0,0,0,13.07-7.49V8.64a8.69,8.69,0,0,0-17.37,0v19l-16.53-9.5a8.65,8.65,0,1,0-8.68,15ZM84.69,51.16a8.64,8.64,0,0,0,5-1.13l29.5-17a8.65,8.65,0,1,0-8.68-15L94,27.61v-19a8.69,8.69,0,0,0-17.37,0v33.9A8.66,8.66,0,0,0,84.69,51.16ZM54.48,88a8.58,8.58,0,0,0-5,1.13L19.93,106.06a8.66,8.66,0,1,0,8.68,15l16.53-9.49v19a8.69,8.69,0,0,0,17.37,0V96.61A8.65,8.65,0,0,0,54.48,88Zm-8-15.87a8.61,8.61,0,0,0-4-10L13,45.14A8.69,8.69,0,0,0,1.17,48.31,8.59,8.59,0,0,0,4.35,60.1l16.47,9.49L4.35,79A8.65,8.65,0,1,0,13,94l29.48-17A8.59,8.59,0,0,0,46.47,72.13Zm93.15-56.22H138.3v1.63h1.32c.61,0,1-.28,1-.8S140.26,15.91,139.62,15.91Zm-2.94-1.5h3c1.62,0,2.7.89,2.7,2.27a2.16,2.16,0,0,1-1.08,1.9l1.17,1.68v.34h-1.69L139.62,19H138.3V20.6h-1.62Zm8.3,3.22a5.48,5.48,0,0,0-5.58-5.83c-3.31,0-5.51,2.39-5.51,5.83,0,3.28,2.2,5.82,5.51,5.82A5.47,5.47,0,0,0,145,17.63Zm1.38,0c0,3.89-2.6,7.14-7,7.14s-6.89-3.28-6.89-7.14,2.57-7.14,6.89-7.14S146.36,13.73,146.36,17.63Z'
85628563
/>
85638564
</svg>
85648565
)

apps/docs/content/docs/en/integrations/snowflake.mdx

Lines changed: 181 additions & 61 deletions
Large diffs are not rendered by default.

apps/sim/blocks/blocks/snowflake.ts

Lines changed: 95 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const sqlSubmissionOperations = [
2424
'get_task_run_output',
2525
'introspect_schema',
2626
'call_procedure',
27-
]
27+
] as const
2828

2929
const computeOperations = [
3030
'execute_sql',
@@ -39,7 +39,7 @@ const computeOperations = [
3939
'get_task_run_output',
4040
'introspect_schema',
4141
'call_procedure',
42-
]
42+
] as const
4343

4444
const maxRowsOperations = [
4545
'execute_sql',
@@ -48,12 +48,21 @@ const maxRowsOperations = [
4848
'get_task_run_output',
4949
'introspect_schema',
5050
'call_procedure',
51-
]
51+
] as const
5252

53-
const dataOperations = ['insert_rows', 'update_rows', 'upsert_rows', 'delete_rows', 'load_data']
54-
const taskDefinitionOperations = ['list_tasks', 'get_task', 'run_task']
53+
const dataOperations = [
54+
'insert_rows',
55+
'update_rows',
56+
'upsert_rows',
57+
'delete_rows',
58+
'load_data',
59+
] as const
60+
const taskDefinitionOperations = ['list_tasks', 'get_task', 'run_task'] as const
5561

56-
function copyOnError(value: unknown, threshold: unknown): string | undefined {
62+
const sqlSubmissionOperationSet: ReadonlySet<string> = new Set(sqlSubmissionOperations)
63+
const maxRowsOperationSet: ReadonlySet<string> = new Set(maxRowsOperations)
64+
65+
function resolveCopyOnError(value: unknown, threshold: unknown): string | undefined {
5766
if (value === undefined || value === null || value === '') return undefined
5867
if (value !== 'SKIP_FILE_NUMBER' && value !== 'SKIP_FILE_PERCENT') return String(value)
5968

@@ -80,7 +89,7 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
8089
docsLink: 'https://docs.sim.ai/integrations/snowflake',
8190
category: 'tools',
8291
integrationType: IntegrationType.Databases,
83-
bgColor: '#F7FBFD',
92+
bgColor: '#FFFFFF',
8493
icon: SnowflakeIcon,
8594
subBlocks: [
8695
{
@@ -105,7 +114,7 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
105114
{ label: 'Run Task', id: 'run_task' },
106115
{ label: 'List Task Runs', id: 'list_task_runs' },
107116
{ label: 'Get Task Run', id: 'get_task_run' },
108-
{ label: 'Cancel Task Run', id: 'cancel_task_run' },
117+
{ label: 'Cancel Task Query', id: 'cancel_task_run' },
109118
{ label: 'Get Task Run Output', id: 'get_task_run_output' },
110119
{ label: 'Introspect Schema', id: 'introspect_schema' },
111120
{ label: 'Call Procedure', id: 'call_procedure' },
@@ -157,6 +166,14 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
157166
condition: { field: 'operation', value: 'get_statement' },
158167
mode: 'advanced',
159168
},
169+
{
170+
id: 'partitionCount',
171+
title: 'Total Partitions',
172+
type: 'short-input',
173+
placeholder: 'partitionCount from the first partition',
174+
condition: { field: 'operation', value: 'get_statement' },
175+
mode: 'advanced',
176+
},
160177
{
161178
id: 'database',
162179
title: 'Database',
@@ -208,7 +225,7 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
208225
type: 'short-input',
209226
placeholder: 'EVENTS',
210227
condition: { field: 'operation', value: [...dataOperations, 'introspect_schema'] },
211-
required: { field: 'operation', value: dataOperations },
228+
required: { field: 'operation', value: [...dataOperations] },
212229
},
213230
{
214231
id: 'rows',
@@ -240,15 +257,15 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
240257
},
241258
{
242259
id: 'filters',
243-
title: 'Equality Filters',
260+
title: 'Match Filters',
244261
type: 'code',
245-
placeholder: '{"status":"expired","tenant_id":42}',
262+
placeholder: '{"status":"expired","tenant_id":42,"archived_at":null}',
246263
condition: { field: 'operation', value: 'delete_rows' },
247264
required: { field: 'operation', value: 'delete_rows' },
248265
wandConfig: {
249266
enabled: true,
250267
prompt:
251-
'Generate a non-empty JSON object of column equality filters. All filters are combined with AND. Return ONLY the JSON object - no explanations, no extra text.',
268+
'Generate a non-empty JSON object of column filters. All filters are combined with AND. A null value matches rows where that column IS NULL; every other value is matched for equality. Return ONLY the JSON object - no explanations, no extra text.',
252269
placeholder: 'Describe the exact rows to delete...',
253270
},
254271
},
@@ -275,6 +292,12 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
275292
placeholder: '.*[.]csv',
276293
condition: { field: 'operation', value: 'load_data' },
277294
mode: 'advanced',
295+
wandConfig: {
296+
enabled: true,
297+
prompt:
298+
'Generate a single regular expression that COPY INTO uses to select staged file paths, for example .*[.]csv or .*/2026/08/.*[.]json[.]gz. Use only regular expression syntax and no quotes. Return ONLY the pattern - no explanations, no extra text.',
299+
placeholder: 'Describe which staged files to load...',
300+
},
278301
},
279302
{
280303
id: 'onError',
@@ -356,12 +379,18 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
356379
placeholder: 'ETL%',
357380
condition: { field: 'operation', value: ['list_warehouses', 'list_tasks'] },
358381
mode: 'advanced',
382+
wandConfig: {
383+
enabled: true,
384+
prompt:
385+
'Generate a single SQL LIKE pattern that matches Snowflake object names, using % for any sequence and _ for one character, for example ETL%. Use only the pattern and no quotes. Return ONLY the pattern - no explanations, no extra text.',
386+
placeholder: 'Describe which object names to match...',
387+
},
359388
},
360389
{
361390
id: 'taskName',
362391
title: 'Task Name',
363392
type: 'short-input',
364-
placeholder: 'DAILY_LOAD',
393+
placeholder: 'DAILY_LOAD (name only, not DB.SCHEMA.TASK)',
365394
condition: {
366395
field: 'operation',
367396
value: ['get_task', 'run_task', 'list_task_runs', 'get_task_run'],
@@ -415,7 +444,7 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
415444
},
416445
{
417446
id: 'errorOnly',
418-
title: 'Errors Only',
447+
title: 'Failed and Cancelled Only',
419448
type: 'switch',
420449
condition: { field: 'operation', value: 'list_task_runs' },
421450
mode: 'advanced',
@@ -468,23 +497,23 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
468497
title: 'Execution Warehouse',
469498
type: 'short-input',
470499
placeholder: 'COMPUTE_WH',
471-
condition: { field: 'operation', value: computeOperations },
500+
condition: { field: 'operation', value: [...computeOperations] },
472501
mode: 'advanced',
473502
},
474503
{
475504
id: 'role',
476505
title: 'Execution Role',
477506
type: 'short-input',
478507
placeholder: 'ANALYST',
479-
condition: { field: 'operation', value: sqlSubmissionOperations },
508+
condition: { field: 'operation', value: [...sqlSubmissionOperations] },
480509
mode: 'advanced',
481510
},
482511
{
483512
id: 'statementTimeoutSeconds',
484513
title: 'Timeout (seconds)',
485514
type: 'short-input',
486515
placeholder: '60',
487-
condition: { field: 'operation', value: sqlSubmissionOperations },
516+
condition: { field: 'operation', value: [...sqlSubmissionOperations] },
488517
mode: 'advanced',
489518
},
490519
{
@@ -494,7 +523,7 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
494523
placeholder: '1000',
495524
condition: {
496525
field: 'operation',
497-
value: maxRowsOperations,
526+
value: [...maxRowsOperations],
498527
},
499528
mode: 'advanced',
500529
},
@@ -544,13 +573,13 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
544573
const operation = String(params.operation)
545574
const result: Record<string, unknown> = {}
546575

547-
if (sqlSubmissionOperations.includes(operation)) {
576+
if (sqlSubmissionOperationSet.has(operation)) {
548577
result.statementTimeoutSeconds = parseOptionalNumberInput(
549578
params.statementTimeoutSeconds,
550579
'Statement timeout'
551580
)
552581
}
553-
if (maxRowsOperations.includes(operation)) {
582+
if (maxRowsOperationSet.has(operation)) {
554583
result.maxRows = parseOptionalNumberInput(params.maxRows, 'Maximum result rows')
555584
}
556585

@@ -560,6 +589,10 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
560589
break
561590
case 'get_statement':
562591
result.partition = parseOptionalNumberInput(params.partition, 'Partition')
592+
result.partitionCount = parseOptionalNumberInput(
593+
params.partitionCount,
594+
'Total partitions'
595+
)
563596
break
564597
case 'insert_rows':
565598
result.rows = parseOptionalJsonInput(params.rows, 'Rows')
@@ -573,7 +606,8 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
573606
result.filters = parseOptionalJsonInput(params.filters, 'Filters')
574607
break
575608
case 'load_data':
576-
result.onError = copyOnError(params.onError, params.onErrorThreshold)
609+
result.onError = resolveCopyOnError(params.onError, params.onErrorThreshold)
610+
result.onErrorThreshold = undefined
577611
break
578612
case 'list_tasks':
579613
result.limit = parseOptionalNumberInput(params.limit, 'Task limit')
@@ -604,12 +638,29 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
604638
async: { type: 'boolean', description: 'Run the SQL statement asynchronously' },
605639
statementHandle: { type: 'string', description: 'Snowflake SQL API statement handle' },
606640
partition: { type: 'number', description: 'Zero-based result partition' },
641+
partitionCount: {
642+
type: 'number',
643+
description:
644+
'Total result partitions, taken from the first partition. Required for accurate truncation reporting when fetching partition 1 or higher',
645+
},
607646
database: { type: 'string', description: 'Snowflake database name' },
608647
schema: { type: 'string', description: 'Snowflake schema name' },
609648
table: { type: 'string', description: 'Snowflake table name' },
610-
rows: { type: 'string', description: 'Structured rows as a JSON array' },
611-
matchColumns: { type: 'string', description: 'Match columns as a JSON array' },
612-
filters: { type: 'string', description: 'Equality filters as a JSON object' },
649+
rows: {
650+
type: 'string',
651+
description:
652+
'Structured rows as a JSON array. Max 1000 rows and 1 MB of bound data per call - stage the files and use Load Data for bulk ingest.',
653+
},
654+
matchColumns: {
655+
type: 'string',
656+
description:
657+
'Match columns as a JSON array. Match values must be non-null and unique across the submitted rows.',
658+
},
659+
filters: {
660+
type: 'string',
661+
description:
662+
'Column filters as a JSON object. A null value matches rows where that column IS NULL; every other value is matched for equality',
663+
},
613664
stagePath: { type: 'string', description: 'Existing Snowflake stage path' },
614665
fileFormat: { type: 'string', description: 'Named Snowflake file format' },
615666
pattern: { type: 'string', description: 'COPY file selection pattern' },
@@ -620,14 +671,27 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
620671
matchByColumnName: { type: 'string', description: 'COPY column-name matching policy' },
621672
warehouseName: { type: 'string', description: 'Warehouse to retrieve or change' },
622673
nameLike: { type: 'string', description: 'SQL LIKE pattern for object names' },
623-
taskName: { type: 'string', description: 'Snowflake task name' },
674+
taskName: {
675+
type: 'string',
676+
description:
677+
'Snowflake task name without a database or schema qualifier, for example DAILY_LOAD',
678+
},
624679
retryLast: { type: 'boolean', description: 'Retry the last failed task graph' },
625680
limit: { type: 'number', description: 'Maximum list results' },
626-
startTime: { type: 'string', description: 'Task history start timestamp' },
627-
endTime: { type: 'string', description: 'Task history end timestamp' },
628-
errorOnly: { type: 'boolean', description: 'Only return failed task runs' },
629-
queryId: { type: 'string', description: 'Task run query UUID' },
630-
includeViews: { type: 'boolean', description: 'Include views in schema introspection' },
681+
startTime: { type: 'string', description: 'Task history scheduled-time range start' },
682+
endTime: { type: 'string', description: 'Task history scheduled-time range end' },
683+
errorOnly: {
684+
type: 'boolean',
685+
description: 'Only return task runs that failed or were cancelled',
686+
},
687+
queryId: {
688+
type: 'string',
689+
description: 'Task run query UUID. Cancel Task Query cancels only this single query',
690+
},
691+
includeViews: {
692+
type: 'boolean',
693+
description: 'Include views and materialized views alongside tables',
694+
},
631695
procedureName: { type: 'string', description: 'Stored procedure name' },
632696
procedureArguments: {
633697
type: 'string',
@@ -645,7 +709,7 @@ export const SnowflakeBlock: BlockConfig<SnowflakeStatementResponse> = {
645709
result: {
646710
type: 'json',
647711
description:
648-
'Completed result partition ({columns, rows, totalRows, currentPartition, nextPartition, truncated})',
712+
'Completed result partition ({columns, rows, totalRows, currentPartition, partitionCount, nextPartition, truncated}). columns, totalRows and truncated are null when Snowflake returned a metadata-less partition response and partitionCount was not supplied',
649713
},
650714
dml: {
651715
type: 'json',

apps/sim/components/icons.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8555,10 +8555,11 @@ export function BigQueryIcon(props: SVGProps<SVGSVGElement>) {
85558555

85568556
export function SnowflakeIcon(props: SVGProps<SVGSVGElement>) {
85578557
return (
8558-
<svg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' {...props}>
8558+
<svg viewBox='0 0 146.36 139.16' xmlns='http://www.w3.org/2000/svg' {...props}>
85598559
<path
85608560
fill='#29B5E8'
8561-
d='M12 2a1 1 0 0 1 1 1v3.59l2.3-2.3a1 1 0 1 1 1.4 1.42L13 9.41V12h2.6l3.7-3.7a1 1 0 0 1 1.4 1.4L18.42 12H22a1 1 0 1 1 0 2h-3.59l2.3 2.3a1 1 0 0 1-1.4 1.4L15.58 14H13v2.59l3.7 3.7a1 1 0 1 1-1.4 1.4L13 19.42V23a1 1 0 1 1-2 0v-3.58l-2.3 2.3a1 1 0 1 1-1.4-1.4l3.7-3.71V14H8.4l-3.7 3.7a1 1 0 0 1-1.4-1.4L5.58 14H2a1 1 0 0 1 0-2h3.59l-2.3-2.3a1 1 0 0 1 1.4-1.4L8.42 12H11V9.41L7.3 5.71a1 1 0 1 1 1.4-1.42l2.3 2.3V3a1 1 0 0 1 1-1Z'
8561+
fillRule='evenodd'
8562+
d='M134.81,60.1l-16.47,9.49L134.81,79a8.65,8.65,0,1,1-8.67,15l-29.51-17a8.68,8.68,0,0,1-4.33-7.75,8.48,8.48,0,0,1,.31-2,8.68,8.68,0,0,1,4-5.19l29.51-16.94A8.69,8.69,0,0,1,138,48.31,8.58,8.58,0,0,1,134.81,60.1Zm-15.59,46L89.72,89.13a8.72,8.72,0,0,0-13.06,7.48v33.9a8.69,8.69,0,0,0,17.37,0v-19L110.54,121a8.66,8.66,0,1,0,8.68-15Zm-34-33.16L72.92,85.09a2.44,2.44,0,0,1-1.54.65H67.77a2.51,2.51,0,0,1-1.54-.65L54,72.9a2.45,2.45,0,0,1-.64-1.52v-3.6A2.5,2.5,0,0,1,54,66.25L66.23,54.06a2.5,2.5,0,0,1,1.54-.64h3.61a2.45,2.45,0,0,1,1.54.64L85.18,66.25a2.49,2.49,0,0,1,.63,1.53v3.6A2.44,2.44,0,0,1,85.18,72.9Zm-9.8-3.38A2.59,2.59,0,0,0,74.73,68l-3.55-3.51a2.51,2.51,0,0,0-1.54-.64h-.13a2.46,2.46,0,0,0-1.53.64L64.43,68a2.51,2.51,0,0,0-.63,1.55v.13a2.41,2.41,0,0,0,.63,1.52L68,74.7a2.48,2.48,0,0,0,1.53.64h.13a2.51,2.51,0,0,0,1.54-.64l3.55-3.53a2.49,2.49,0,0,0,.65-1.52ZM19.93,33.08,49.44,50a8.73,8.73,0,0,0,13.07-7.49V8.64a8.69,8.69,0,0,0-17.37,0v19l-16.53-9.5a8.65,8.65,0,1,0-8.68,15ZM84.69,51.16a8.64,8.64,0,0,0,5-1.13l29.5-17a8.65,8.65,0,1,0-8.68-15L94,27.61v-19a8.69,8.69,0,0,0-17.37,0v33.9A8.66,8.66,0,0,0,84.69,51.16ZM54.48,88a8.58,8.58,0,0,0-5,1.13L19.93,106.06a8.66,8.66,0,1,0,8.68,15l16.53-9.49v19a8.69,8.69,0,0,0,17.37,0V96.61A8.65,8.65,0,0,0,54.48,88Zm-8-15.87a8.61,8.61,0,0,0-4-10L13,45.14A8.69,8.69,0,0,0,1.17,48.31,8.59,8.59,0,0,0,4.35,60.1l16.47,9.49L4.35,79A8.65,8.65,0,1,0,13,94l29.48-17A8.59,8.59,0,0,0,46.47,72.13Zm93.15-56.22H138.3v1.63h1.32c.61,0,1-.28,1-.8S140.26,15.91,139.62,15.91Zm-2.94-1.5h3c1.62,0,2.7.89,2.7,2.27a2.16,2.16,0,0,1-1.08,1.9l1.17,1.68v.34h-1.69L139.62,19H138.3V20.6h-1.62Zm8.3,3.22a5.48,5.48,0,0,0-5.58-5.83c-3.31,0-5.51,2.39-5.51,5.83,0,3.28,2.2,5.82,5.51,5.82A5.47,5.47,0,0,0,145,17.63Zm1.38,0c0,3.89-2.6,7.14-7,7.14s-6.89-3.28-6.89-7.14,2.57-7.14,6.89-7.14S146.36,13.73,146.36,17.63Z'
85628563
/>
85638564
</svg>
85648565
)

apps/sim/lib/integrations/integrations.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18157,7 +18157,7 @@
1815718157
"name": "Snowflake",
1815818158
"description": "Query data and manage warehouses and tasks in Snowflake",
1815918159
"longDescription": "Connect with a Snowflake programmatic access token to execute SQL, synchronize structured rows, load staged data, manage warehouses and tasks, inspect schemas, and call stored procedures.",
18160-
"bgColor": "#F7FBFD",
18160+
"bgColor": "#FFFFFF",
1816118161
"iconName": "SnowflakeIcon",
1816218162
"docsUrl": "https://docs.sim.ai/integrations/snowflake",
1816318163
"operations": [
@@ -18187,7 +18187,7 @@
1818718187
},
1818818188
{
1818918189
"name": "Delete Rows",
18190-
"description": "Delete rows matching a required set of bound equality filters."
18190+
"description": "Delete rows matching a required set of bound column filters."
1819118191
},
1819218192
{
1819318193
"name": "Load Data",
@@ -18230,8 +18230,8 @@
1823018230
"description": "Find one task history record by query ID within Snowflake’s seven-day window and 10000 most recent records after optional filters."
1823118231
},
1823218232
{
18233-
"name": "Cancel Task Run",
18234-
"description": "Cancel a running task query with SYSTEM$CANCEL_QUERY."
18233+
"name": "Cancel Task Query",
18234+
"description": "Cancel one running task query by query ID with SYSTEM$CANCEL_QUERY. Other tasks in the same task graph keep running and must be cancelled separately."
1823518235
},
1823618236
{
1823718237
"name": "Get Task Run Output",

0 commit comments

Comments
 (0)