diff --git a/macros/udfs/create_udf_get_chainhead.sql b/macros/udfs/create_udf_get_chainhead.sql index a4ccdac..a5d4404 100644 --- a/macros/udfs/create_udf_get_chainhead.sql +++ b/macros/udfs/create_udf_get_chainhead.sql @@ -1,27 +1,41 @@ {% macro create_UDF_GET_CHAINHEAD() %} {% set sql %} - CREATE - OR REPLACE FUNCTION {{ target.database }}.STREAMLINE.UDF_GET_CHAINHEAD( - ) returns INTEGER - AS $$ - SELECT - {{ target.database }}.live.udf_api( - 'POST', - 'https://rpc.mainnet.near.org', - { - 'Content-Type': 'application/json' - }, - { - 'jsonrpc': '2.0', - 'id': 'dontcare', - 'method' :'status', - 'params':{ - 'finality': 'final' - } - } - ) :data :result :sync_info :latest_block_height :: INT AS block_id - - $$ - {% endset %} + CREATE OR REPLACE PROCEDURE {{ target.database }}.STREAMLINE.UDF_GET_CHAINHEAD( + ) RETURNS STRING + LANGUAGE JAVASCRIPT + EXECUTE AS CALLER + AS + $$ + let resultFound = false; + let blockId = 0; + while (!resultFound) { + var stmt = snowflake.createStatement({ + sqlText: `SELECT {{ target.database }}.live.udf_api( + 'POST', + 'https://rpc.mainnet.near.org', + { + 'Content-Type': 'application/json' + }, + { + 'jsonrpc': '2.0', + 'id': 'dontcare', + 'method' :'status', + 'params':{ + 'finality': 'final' + } + } + ) :data :result :sync_info :latest_block_height :: INT AS block_id;` + }); + var result = stmt.execute(); + result.next(); + res_temp = result.getColumnValue(1); + if (res_temp != null) { + res = res_temp; + resultFound = true; + } + } + return res; + $$; + {% endset %} {% do run_query(sql) %} {% endmacro %}