code: def test_run_storing_query_ids_extra(
      self, mock_conn, sql, expected_sql, expected_query_ids
  ):
      hook = SnowflakeHook()
      conn = mock_conn.return_value
      cur = mock.MagicMock(rowcount=0)
      conn.cursor.return_value = cur
      type(cur).sfqid = mock.PropertyMock(
          side_effect=expected_query_ids
      )
      mock_params = {"mock_param": "mock_param"}
      hook.run(sql, parameters=mock_params)
  
      cur.execute.assert_has_calls(
          [mock.call(query, mock_params) for query in expected_sql]
      )
      assert hook.query_ids == expected_query_ids
      cur.close.assert_called()
  
imports: from __future__ import annotations
  import json
  from copy import deepcopy
  from typing import TYPE_CHECKING, Any
  from unittest import mock
  import pytest
  from cryptography.hazmat.backends import default_backend
  from cryptography.hazmat.primitives import serialization
  from cryptography.hazmat.primitives.asymmetric import rsa
  from airflow.models import Connection
  from airflow.providers.snowflake.hooks.snowflake import SnowflakeHook
label_desc: Use image node_id 15 for calling the TestPytestSnowflakeHook obj's underlying member method code with example usage: obj.test_run_storing_query_ids_extra(mock_conn, sql, expected_sql, expected_query_ids) without return types