We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
bug: `Scalar.isin(Column)` returns a Column, not a Scalar
### What happened?

```python
import ibis

needle = ibis.literal(2)
haystack = ibis.memtable({"x": [1, 2, 3]}).x
type(needle.isin(haystack))
# ibis.expr.types.logical.BooleanColumn
```

### What version of ibis are you using?

main

### What backend(s) are you using, if any?

_No response_

### Relevant log output

_No response_

### Code of Conduct

- [X] I agree to follow this project's Code of Conduct

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `ibis/expr/operations/subqueries.py`
Content:
```
1 from __future__ import annotations
2 
3 from public import public
4 
5 import ibis.expr.datashape as ds
6 import ibis.expr.datatypes as dt
7 import ibis.expr.rules as rlz
8 from ibis.common.annotations import attribute
9 from ibis.common.exceptions import IntegrityError
10 from ibis.expr.operations.core import Value
11 from ibis.expr.operations.relations import Relation  # noqa: TCH001
12 
13 
14 @public
15 class Subquery(Value):
16     rel: Relation
17 
18     @attribute
19     def relations(self):
20         return frozenset()
21 
22 
23 @public
24 class ExistsSubquery(Subquery):
25     dtype = dt.boolean
26     shape = ds.columnar
27 
28 
29 @public
30 class ScalarSubquery(Subquery):
31     shape = ds.scalar
32 
33     def __init__(self, rel):
34         if len(rel.schema) != 1:
35             raise IntegrityError(
36                 "Relation passed to ScalarSubquery() must have exactly one "
37                 f"column, got {len(rel.schema)}"
38             )
39         super().__init__(rel=rel)
40 
41     @attribute
42     def value(self):
43         (value,) = self.rel.values.values()
44         return value
45 
46     @attribute
47     def dtype(self):
48         return self.value.dtype
49 
50 
51 @public
52 class InSubquery(Subquery):
53     needle: Value
54 
55     dtype = dt.boolean
56     shape = ds.columnar
57 
58     def __init__(self, rel, needle):
59         if len(rel.schema) != 1:
60             raise IntegrityError(
61                 "Relation passed to InSubquery() must have exactly one "
62                 f"column, got {len(rel.schema)}"
63             )
64         (value,) = rel.values.values()
65         if not rlz.comparable(value, needle):
66             raise IntegrityError(f"{needle!r} is not comparable to {value!r}")
67         super().__init__(rel=rel, needle=needle)
68 
69     @attribute
70     def value(self):
71         (value,) = self.rel.values.values()
72         return value
73 
74     @attribute
75     def relations(self):
76         return self.needle.relations
77
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/ibis/expr/operations/subqueries.py b/ibis/expr/operations/subqueries.py
--- a/ibis/expr/operations/subqueries.py
+++ b/ibis/expr/operations/subqueries.py
@@ -53,7 +53,7 @@
     needle: Value
 
     dtype = dt.boolean
-    shape = ds.columnar
+    shape = rlz.shape_like("needle")
 
     def __init__(self, rel, needle):
         if len(rel.schema) != 1:

{"golden_diff": "diff --git a/ibis/expr/operations/subqueries.py b/ibis/expr/operations/subqueries.py\n--- a/ibis/expr/operations/subqueries.py\n+++ b/ibis/expr/operations/subqueries.py\n@@ -53,7 +53,7 @@\n     needle: Value\n \n     dtype = dt.boolean\n-    shape = ds.columnar\n+    shape = rlz.shape_like(\"needle\")\n \n     def __init__(self, rel, needle):\n         if len(rel.schema) != 1:\n", "issue": "bug: `Scalar.isin(Column)` returns a Column, not a Scalar\n### What happened?\n\n```python\r\nimport ibis\r\n\r\nneedle = ibis.literal(2)\r\nhaystack = ibis.memtable({\"x\": [1, 2, 3]}).x\r\ntype(needle.isin(haystack))\r\n# ibis.expr.types.logical.BooleanColumn\r\n```\n\n### What version of ibis are you using?\n\nmain\n\n### What backend(s) are you using, if any?\n\n_No response_\n\n### Relevant log output\n\n_No response_\n\n### Code of Conduct\n\n- [X] I agree to follow this project's Code of Conduct\n", "before_files": [{"content": "from __future__ import annotations\n\nfrom public import public\n\nimport ibis.expr.datashape as ds\nimport ibis.expr.datatypes as dt\nimport ibis.expr.rules as rlz\nfrom ibis.common.annotations import attribute\nfrom ibis.common.exceptions import IntegrityError\nfrom ibis.expr.operations.core import Value\nfrom ibis.expr.operations.relations import Relation  # noqa: TCH001\n\n\n@public\nclass Subquery(Value):\n    rel: Relation\n\n    @attribute\n    def relations(self):\n        return frozenset()\n\n\n@public\nclass ExistsSubquery(Subquery):\n    dtype = dt.boolean\n    shape = ds.columnar\n\n\n@public\nclass ScalarSubquery(Subquery):\n    shape = ds.scalar\n\n    def __init__(self, rel):\n        if len(rel.schema) != 1:\n            raise IntegrityError(\n                \"Relation passed to ScalarSubquery() must have exactly one \"\n                f\"column, got {len(rel.schema)}\"\n            )\n        super().__init__(rel=rel)\n\n    @attribute\n    def value(self):\n        (value,) = self.rel.values.values()\n        return value\n\n    @attribute\n    def dtype(self):\n        return self.value.dtype\n\n\n@public\nclass InSubquery(Subquery):\n    needle: Value\n\n    dtype = dt.boolean\n    shape = ds.columnar\n\n    def __init__(self, rel, needle):\n        if len(rel.schema) != 1:\n            raise IntegrityError(\n                \"Relation passed to InSubquery() must have exactly one \"\n                f\"column, got {len(rel.schema)}\"\n            )\n        (value,) = rel.values.values()\n        if not rlz.comparable(value, needle):\n            raise IntegrityError(f\"{needle!r} is not comparable to {value!r}\")\n        super().__init__(rel=rel, needle=needle)\n\n    @attribute\n    def value(self):\n        (value,) = self.rel.values.values()\n        return value\n\n    @attribute\n    def relations(self):\n        return self.needle.relations\n", "path": "ibis/expr/operations/subqueries.py"}], "after_files": [{"content": "from __future__ import annotations\n\nfrom public import public\n\nimport ibis.expr.datashape as ds\nimport ibis.expr.datatypes as dt\nimport ibis.expr.rules as rlz\nfrom ibis.common.annotations import attribute\nfrom ibis.common.exceptions import IntegrityError\nfrom ibis.expr.operations.core import Value\nfrom ibis.expr.operations.relations import Relation  # noqa: TCH001\n\n\n@public\nclass Subquery(Value):\n    rel: Relation\n\n    @attribute\n    def relations(self):\n        return frozenset()\n\n\n@public\nclass ExistsSubquery(Subquery):\n    dtype = dt.boolean\n    shape = ds.columnar\n\n\n@public\nclass ScalarSubquery(Subquery):\n    shape = ds.scalar\n\n    def __init__(self, rel):\n        if len(rel.schema) != 1:\n            raise IntegrityError(\n                \"Relation passed to ScalarSubquery() must have exactly one \"\n                f\"column, got {len(rel.schema)}\"\n            )\n        super().__init__(rel=rel)\n\n    @attribute\n    def value(self):\n        (value,) = self.rel.values.values()\n        return value\n\n    @attribute\n    def dtype(self):\n        return self.value.dtype\n\n\n@public\nclass InSubquery(Subquery):\n    needle: Value\n\n    dtype = dt.boolean\n    shape = rlz.shape_like(\"needle\")\n\n    def __init__(self, rel, needle):\n        if len(rel.schema) != 1:\n            raise IntegrityError(\n                \"Relation passed to InSubquery() must have exactly one \"\n                f\"column, got {len(rel.schema)}\"\n            )\n        (value,) = rel.values.values()\n        if not rlz.comparable(value, needle):\n            raise IntegrityError(f\"{needle!r} is not comparable to {value!r}\")\n        super().__init__(rel=rel, needle=needle)\n\n    @attribute\n    def value(self):\n        (value,) = self.rel.values.values()\n        return value\n\n    @attribute\n    def relations(self):\n        return self.needle.relations\n", "path": "ibis/expr/operations/subqueries.py"}]}