code: def test_should_return_projected_columns(self):
      dataframe = create_dataframe(3)
  
      batch = Batch(frames=dataframe)
      proj_batch = Batch(frames=pd.DataFrame(dataframe["data"]))
      expression = [
          type(
              "AbstractExpression",
              (),
              {
                  "evaluate": lambda x: Batch(
                      pd.DataFrame(x.frames["data"])
                  ),
                  "find_all": lambda expr: [],
              },
          )
      ]
  
      plan = type(
          "ScanPlan",
          (),
          {"predicate": None, "columns": expression, "alias": None},
      )
      proj_executor = SequentialScanExecutor(MagicMock(), plan)
      proj_executor.append_child(DummyExecutor([batch]))
  
      actual = list(proj_executor.exec())[0]
      self.assertEqual(proj_batch, actual)
  
file_path: evadb/test/unit_tests/executor/test_seq_scan_executor.py
imports: import unittest
  from test.unit_tests.executor.utils import DummyExecutor
  from test.util import create_dataframe
  import pandas
  from mock import MagicMock
  from evadb.executor.seq_scan_executor import SequentialScanExecutor
  from evadb.models.storage.batch import Batch
label_desc: Use image node_id 3 for calling the SeqScanExecutorTest obj's underlying member method code with example usage: obj.test_should_return_projected_columns() without return types