opencybersecurityalliance / firepit

Firepit - STIX Columnar Storage
Apache License 2.0
15 stars 12 forks source link

DependentObjectsStillExist execption with postgresql when trying to reuse a view name #3

Closed pcoccoli closed 3 years ago

pcoccoli commented 3 years ago

One way to recreate:

firepit cache my_data ~/tmp/stix_bundle.json
firepit extract addrs1 ipv4-addr my_data "[ipv4-addr:value ISSUBSET '192.168.0.0/16']"
firepit assign addrs2 --op sort --by value addrs1
firepit extract addrs1 ipv4-addr my_data "[ipv4-addr:value ISSUBSET '192.168.1.0/24']"

The second time we extract and try to reuse the name addrs1 an exception is raised:

Traceback (most recent call last):
  File "/home/pcoccoli/.pyenv/versions/gh36/bin/firepit", line 33, in <module>
    sys.exit(load_entry_point('firepit', 'console_scripts', 'firepit')())
  File "/home/pcoccoli/.pyenv/versions/3.6.8/envs/gh36/lib/python3.6/site-packages/typer/main.py", line 214, in __call__
    return get_command(self)(*args, **kwargs)
  File "/home/pcoccoli/.pyenv/versions/3.6.8/envs/gh36/lib/python3.6/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/pcoccoli/.pyenv/versions/3.6.8/envs/gh36/lib/python3.6/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/pcoccoli/.pyenv/versions/3.6.8/envs/gh36/lib/python3.6/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/pcoccoli/.pyenv/versions/3.6.8/envs/gh36/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/pcoccoli/.pyenv/versions/3.6.8/envs/gh36/lib/python3.6/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/pcoccoli/.pyenv/versions/3.6.8/envs/gh36/lib/python3.6/site-packages/typer/main.py", line 497, in wrapper
    return callback(**use_params)  # type: ignore
  File "/home/pcoccoli/github/firepit/firepit/cli.py", line 60, in extract
    db.extract(name, sco_type, query_id, pattern)
  File "/home/pcoccoli/github/firepit/firepit/sqlstorage.py", line 370, in extract
    self._extract(viewname, sco_type, sco_type, pattern, query_id)
  File "/home/pcoccoli/github/firepit/firepit/sqlstorage.py", line 187, in _extract
    cursor = self._create_view(viewname, select, deps=[tablename], cursor=cursor)
  File "/home/pcoccoli/github/firepit/firepit/pgstorage.py", line 116, in _create_view
    self._execute(f'DROP VIEW IF EXISTS "{viewname}";', cursor)
  File "/home/pcoccoli/github/firepit/firepit/sqlstorage.py", line 80, in _execute
    cursor.execute(statement)
  File "/home/pcoccoli/.pyenv/versions/3.6.8/envs/gh36/lib/python3.6/site-packages/psycopg2/extras.py", line 251, in execute
    return super(RealDictCursor, self).execute(query, vars)
psycopg2.errors.DependentObjectsStillExist: cannot drop view addrs1 because other objects depend on it
DETAIL:  view addrs2 depends on view addrs1
HINT:  Use DROP ... CASCADE to drop the dependent objects too.