<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/yql/essentials/core/common_opt, branch oidc-1.2.6.0-dev</title>
<subtitle>Mirror of YDB github repos</subtitle>
<id>https://code.mastervirt.ru/ydb/atom?h=oidc-1.2.6.0-dev</id>
<link rel='self' href='https://code.mastervirt.ru/ydb/atom?h=oidc-1.2.6.0-dev'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/'/>
<updated>2025-08-19T15:27:32Z</updated>
<entry>
<title>YQL-20150: Add OptimizeLMap optimizer</title>
<updated>2025-08-19T15:27:32Z</updated>
<author>
<name>maxkovalev</name>
<email>maxkovalev@yandex-team.com</email>
</author>
<published>2025-08-19T14:31:24Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=24dd9f1329627628e9b0efe054c0d9cb4542002a'/>
<id>urn:sha1:24dd9f1329627628e9b0efe054c0d9cb4542002a</id>
<content type='text'>
YQL-20150: Add OptimizeLMap optimizer
commit_hash:065921d83e492d815fa95f3e9bedd006aee0c887
</content>
</entry>
<entry>
<title>YQL-20211 YQL-20223: skip nulls in pushdown over optional side</title>
<updated>2025-08-08T08:40:53Z</updated>
<author>
<name>lucius</name>
<email>lucius@yandex-team.com</email>
</author>
<published>2025-08-08T07:53:50Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=cd8c631d29f7e015c27f5038539827c919b58b59'/>
<id>urn:sha1:cd8c631d29f7e015c27f5038539827c919b58b59</id>
<content type='text'>
Добавляю поддержку фильтрации нуллов при пушдауне на необязательную сторону джоина (до этого она работала только при пушдауне на обязательную сторону).

Как в пушдауне предиката с левой стороны одновременно на правую (PredicatePushdownOverEquiJoinBothSides), так и в пушдауне сразу на правую (FilterPushdownOverJoinOptionalSide).

Включается по флагу PredicatePushdownOverEquiJoinBothSides.

Тесты с включением можно посмотреть тут: &lt;https://nda.ya.ru/t/e2f09Qw_7HNvu6&gt;
commit_hash:0f101bfced2a510995577e1bca90eef6d2505992
</content>
</entry>
<entry>
<title>Push non-member equality filter expressions over join</title>
<updated>2025-08-07T11:32:20Z</updated>
<author>
<name>aneporada</name>
<email>aneporada@yandex-team.com</email>
</author>
<published>2025-08-07T11:15:45Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=cd8fda2d174e97c10e8f59e0286039aa77a5df89'/>
<id>urn:sha1:cd8fda2d174e97c10e8f59e0286039aa77a5df89</id>
<content type='text'>
commit_hash:6bc558d09291d35872e4f2a9da0ada2f6fe5e4f3
</content>
</entry>
<entry>
<title>YQL-20206: Optimize X AND/OR Not X YQL-20229</title>
<updated>2025-08-01T17:56:28Z</updated>
<author>
<name>lucius</name>
<email>lucius@yandex-team.com</email>
</author>
<published>2025-08-01T17:38:14Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=d26972227453799b411b840c959784b73d6d99db'/>
<id>urn:sha1:d26972227453799b411b840c959784b73d6d99db</id>
<content type='text'>
Делает возможным такие оптимизации:

- `X AND NOT X -&gt; FALSE`

- `X OR NOT X -&gt; TRUE`

Работает в том числе если X будет завернут в Unessential.

Только для неопциональных X.

Пример замены когда много аргументов:

```
In:  A and     X and B and NOT X and C and X and D
Out: A and FALSE and B           and C       and D
```

Выражение из примера можно преобразовать если X, B и C не требуют побочных эффектов.

Или вот пример если B' требует побочных эффектов:

```
In:  A and X and B' and NOT X and C and X and D
Out: A and X and B' and FALSE and C       and D
```

Про что думал, но не стал делать:

1) Можно заменять на константу не только X / NOT X, но и всю цепочку подряд идущих узлов без побочных эффектов. Оставляю это другим оптимизаторам, чтобы меньше думать про нюансы и не дублировать код (в частности чтобы не заботиться о типизации если в цепочке оказался Optional Bool).

2) Можно поддержать опциональные X, тогда будет примерно такое преобразование `X AND NOT X -&gt; IF(X IS NULL, NULL, FALSE)`. Неочевидно что это улучшение и пока решили не делать.

Оптимизатор под флагом. Тесты с включением флага тут: [https://nda.ya.ru/t/6YuCsGDE7H8Dnd](https://nda.ya.ru/t/YVdMA5B37H8Dne
commit_hash:c34cf075a46c6b06c742ff0b15697b93ede75924
</content>
</entry>
<entry>
<title>YQL-20258 side effects infrastructure</title>
<updated>2025-08-01T13:40:18Z</updated>
<author>
<name>vvvv</name>
<email>vvvv@yandex-team.com</email>
</author>
<published>2025-08-01T13:25:04Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=0030e78e89809f2a0c8c10260592f15cda5cbc81'/>
<id>urn:sha1:0030e78e89809f2a0c8c10260592f15cda5cbc81</id>
<content type='text'>
commit_hash:cb76201226f30679f63457a9f9e1ebdb31dcd05b
</content>
</entry>
<entry>
<title>YQL-20209: use Filter+Unessential instead of SkipNullMembers in EmitSkipNullOnPushdown</title>
<updated>2025-08-01T10:43:15Z</updated>
<author>
<name>lucius</name>
<email>lucius@yandex-team.com</email>
</author>
<published>2025-08-01T10:17:11Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=363e5825447a1519cab9e46a42797ebb40bb9052'/>
<id>urn:sha1:363e5825447a1519cab9e46a42797ebb40bb9052</id>
<content type='text'>
commit_hash:464cfa9be3ee98de47a47ff4e88db5b0d9eb37ec
</content>
</entry>
<entry>
<title>ExtractOrPredicatesOverEquiJoin optimizer</title>
<updated>2025-07-30T17:04:49Z</updated>
<author>
<name>ziganshinmr</name>
<email>ziganshinmr@yandex-team.com</email>
</author>
<published>2025-07-30T16:35:30Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=9b40a0945af31945ff1e7ec06ef3f7eebcbe265b'/>
<id>urn:sha1:9b40a0945af31945ff1e7ec06ef3f7eebcbe265b</id>
<content type='text'>
commit_hash:aff32f6cf4f63154d94ed84b97bdcae83b13caa5
</content>
</entry>
<entry>
<title>NormalizeDependsOn pipeline stage</title>
<updated>2025-07-30T14:18:32Z</updated>
<author>
<name>ziganshinmr</name>
<email>ziganshinmr@yandex-team.com</email>
</author>
<published>2025-07-30T13:34:23Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=98616151781d016d3a66cc11cb9d789193929cf4'/>
<id>urn:sha1:98616151781d016d3a66cc11cb9d789193929cf4</id>
<content type='text'>
commit_hash:a563966e2448de9828c0786f9ba9939b55fc21fd
</content>
</entry>
<entry>
<title>Minor refactoring equality filter over join</title>
<updated>2025-07-29T12:39:08Z</updated>
<author>
<name>aneporada</name>
<email>aneporada@yandex-team.com</email>
</author>
<published>2025-07-29T12:13:54Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=9d0d23532ca103f164cd06b12db6f029b2e5d460'/>
<id>urn:sha1:9d0d23532ca103f164cd06b12db6f029b2e5d460</id>
<content type='text'>
commit_hash:38d8a5aac94aa5a0a4fa0f7e387aa058765a973f
</content>
</entry>
<entry>
<title>YQL-20197: fix FilterOverAggregate when predicate uses all fields</title>
<updated>2025-07-22T09:08:10Z</updated>
<author>
<name>lucius</name>
<email>lucius@yandex-team.com</email>
</author>
<published>2025-07-22T08:54:54Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=483d11bf5a8df9991fc6c614908d8f5a750dcca8'/>
<id>urn:sha1:483d11bf5a8df9991fc6c614908d8f5a750dcca8</id>
<content type='text'>
Оказалось что пушдаун предиката через Aggregate не работал когда в предикате используются все поля из Aggregate. Чиню
commit_hash:c2e8cab88a0adb496464b9dac52807fcc95f433d
</content>
</entry>
</feed>
