code: protected function findColumns($table)
      {
          $sql = <<<'SQL'
  SELECT
      A.COLUMN_NAME,
      A.DATA_TYPE,
      A.DATA_PRECISION,
      A.DATA_SCALE,
      (
        CASE A.CHAR_USED WHEN 'C' THEN A.CHAR_LENGTH
          ELSE A.DATA_LENGTH
        END
      ) AS DATA_LENGTH,
      A.NULLABLE,
      A.DATA_DEFAULT,
      COM.COMMENTS AS COLUMN_COMMENT
  FROM ALL_TAB_COLUMNS A
      INNER JOIN ALL_OBJECTS B ON B.OWNER = A.OWNER AND LTRIM(B.OBJECT_NAME) = LTRIM(A.TABLE_NAME)
      LEFT JOIN ALL_COL_COMMENTS COM ON (A.OWNER = COM.OWNER AND A.TABLE_NAME = COM.TABLE_NAME AND A.COLUMN_NAME = COM.COLUMN_NAME)
  WHERE
      A.OWNER = :schemaName
      AND B.OBJECT_TYPE IN ('TABLE', 'VIEW', 'MATERIALIZED VIEW')
      AND B.OBJECT_NAME = :tableName
  ORDER BY A.COLUMN_ID
  SQL;
  
          try {
              $columns = $this->db->createCommand($sql, [
                  ':tableName' => $table->name,
                  ':schemaName' => $table->schemaName,
              ])->queryAll();
          } catch (\Exception $e) {
              return false;
          }
  
          if (empty($columns)) {
              return false;
          }
  
          foreach ($columns as $column) {
              if ($this->db->slavePdo->getAttribute(\PDO::ATTR_CASE) === \PDO::CASE_LOWER) {
                  $column = array_change_key_case($column, CASE_UPPER);
              }
              $c = $this->createColumn($column);
              $table->columns[$c->name] = $c;
          }
  
          return true;
      }
docs: Collects the table column metadata.
  @param TableSchema $table the table schema
  @return bool whether the table exists