fix(prqlc): deduplicate selected items in gen_projection - #5305

Merged
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302
Jun 11, 2025
Merged

fix(prqlc): deduplicate selected items in gen_projection#5305
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302

Conversation

@lukapeschke

Copy link
Copy Markdown
Contributor

fixes#5302

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

After spending a while digging into the intermediary steps, this is my naive attempt at solving #5302 .

However I'm not satisfied with it: Deduplicating what we have in SELECT statements seems kinda magic, and might not be what we want in some cases. Also, I believe this should be solved earlier in the compilation process.

I see a few things in the SQL output that could be solved:

  1. table_4 could be completely removed if FIRST_VALUE(my_concatenated_col) was directly selected as "new_name"
  2. CONCAT(col, ' ', other_col) AS my_concatenated_col and _expr_0 are not needed in table_1. I guess a solution I see here would be to process S-string tables with sqlparser to see if there is an explicit column selection. This would allow to not pass Wildcard around, and avoid the SELECT table_0.* in the final query.
  3. table_1 could just reference my_concatenated_col and _expr_0 by alias. Not sure how to pass the information "this expression has been evaluated in a previous CTE and does not need to be re-evaluated" around though.

@max-sixty do you have any ideas/hints on how I could move forward with this ? Thanks in advance!

@max-sixty

Copy link
Copy Markdown
Member

hi @lukapeschke, and thanks for the contribution!

is there an example of the proposed code behaving worse than the existing code? otherwise this seems like an upgrade...

(I agree it's not perfect, but making incremental improvements is still good...)

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

@max-sixty I've no example of this behaving worse than existing code.

You're right, we can proceed with incremental improvements. I simplified deduplicate_select_items to ensure the generated SQL query is valid, and added an extra alias to the test case to ensure it is taken into account in the final query.

I'll try to address the other issues in different PRs if that's okay with you ?

My next step will be to try to change FIRST_VALUE(name) AS _expr_0 to just _expr_0 in table_0, so the SQL query is valid

@lukapeschke
lukapeschke marked this pull request as ready for review May 27, 2025 08:52
@lukapeschke

lukapeschke commented May 27, 2025

Copy link
Copy Markdown
ContributorAuthor

#5310 adresses the second point in this comment. I guess this needs to be done earlier in the process to prevent _expr_0 from being selected, but I wasn't quite sure where exactly table declarations get created from s-strings

fixesPRQL#5302
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
…ple aliases work as expected in the test
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
@max-sixty

Copy link
Copy Markdown
Member

sorry I missed this @lukapeschke ! I missed a couple of others too, but am back & merging things!

I'll merge this. I'm a tiiiiny bit hesitant that we're just removing any duplicate columns — there may be times that people expect duplicate columns to persist, and ideally we'd solve this at a different stage in the compiler

but given where we're at, the result does seem better, and endlessly pushing off small improvements in the hope of fixing underlying compiler issues doesn't seem like a successful strategy :)

thank you for the contribution!

@max-sixty
max-sixty merged commit 3f2e21b into PRQL:mainJun 11, 2025
@lukapeschke
lukapeschke deleted the solve-5302 branch June 12, 2025 08:15
@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

Thanks a lot for the merge @max-sixty :)

I think I've finally found the underlying issue, details here: #5302 (comment)

I'm not really sure about how to proceed to fix it though, I'm not sure what the condition should be to determine if the sort columns should be reverted or not... Maybe you have an idea ?

Also, could you please re-open #5302 since it's not completely fixed yet ? I don't have the rights to do it

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

select in joined pipeline causes invalid expressions to be referenced

2 participants

@lukapeschke@max-sixty
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(prqlc): deduplicate selected items in gen_projection - #5305

Merged
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302
Jun 11, 2025
Merged

fix(prqlc): deduplicate selected items in gen_projection#5305
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302

Conversation

@lukapeschke

Copy link
Copy Markdown
Contributor

fixes#5302

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

After spending a while digging into the intermediary steps, this is my naive attempt at solving #5302 .

However I'm not satisfied with it: Deduplicating what we have in SELECT statements seems kinda magic, and might not be what we want in some cases. Also, I believe this should be solved earlier in the compilation process.

I see a few things in the SQL output that could be solved:

  1. table_4 could be completely removed if FIRST_VALUE(my_concatenated_col) was directly selected as "new_name"
  2. CONCAT(col, ' ', other_col) AS my_concatenated_col and _expr_0 are not needed in table_1. I guess a solution I see here would be to process S-string tables with sqlparser to see if there is an explicit column selection. This would allow to not pass Wildcard around, and avoid the SELECT table_0.* in the final query.
  3. table_1 could just reference my_concatenated_col and _expr_0 by alias. Not sure how to pass the information "this expression has been evaluated in a previous CTE and does not need to be re-evaluated" around though.

@max-sixty do you have any ideas/hints on how I could move forward with this ? Thanks in advance!

@max-sixty

Copy link
Copy Markdown
Member

hi @lukapeschke, and thanks for the contribution!

is there an example of the proposed code behaving worse than the existing code? otherwise this seems like an upgrade...

(I agree it's not perfect, but making incremental improvements is still good...)

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

@max-sixty I've no example of this behaving worse than existing code.

You're right, we can proceed with incremental improvements. I simplified deduplicate_select_items to ensure the generated SQL query is valid, and added an extra alias to the test case to ensure it is taken into account in the final query.

I'll try to address the other issues in different PRs if that's okay with you ?

My next step will be to try to change FIRST_VALUE(name) AS _expr_0 to just _expr_0 in table_0, so the SQL query is valid

@lukapeschke
lukapeschke marked this pull request as ready for review May 27, 2025 08:52
@lukapeschke

lukapeschke commented May 27, 2025

Copy link
Copy Markdown
ContributorAuthor

#5310 adresses the second point in this comment. I guess this needs to be done earlier in the process to prevent _expr_0 from being selected, but I wasn't quite sure where exactly table declarations get created from s-strings

fixesPRQL#5302
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
…ple aliases work as expected in the test
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
@max-sixty

Copy link
Copy Markdown
Member

sorry I missed this @lukapeschke ! I missed a couple of others too, but am back & merging things!

I'll merge this. I'm a tiiiiny bit hesitant that we're just removing any duplicate columns — there may be times that people expect duplicate columns to persist, and ideally we'd solve this at a different stage in the compiler

but given where we're at, the result does seem better, and endlessly pushing off small improvements in the hope of fixing underlying compiler issues doesn't seem like a successful strategy :)

thank you for the contribution!

@max-sixty
max-sixty merged commit 3f2e21b into PRQL:mainJun 11, 2025
@lukapeschke
lukapeschke deleted the solve-5302 branch June 12, 2025 08:15
@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

Thanks a lot for the merge @max-sixty :)

I think I've finally found the underlying issue, details here: #5302 (comment)

I'm not really sure about how to proceed to fix it though, I'm not sure what the condition should be to determine if the sort columns should be reverted or not... Maybe you have an idea ?

Also, could you please re-open #5302 since it's not completely fixed yet ? I don't have the rights to do it

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

select in joined pipeline causes invalid expressions to be referenced

2 participants

@lukapeschke@max-sixty
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(prqlc): deduplicate selected items in gen_projection - #5305

Merged
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302
Jun 11, 2025
Merged

fix(prqlc): deduplicate selected items in gen_projection#5305
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302

Conversation

@lukapeschke

Copy link
Copy Markdown
Contributor

fixes#5302

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

After spending a while digging into the intermediary steps, this is my naive attempt at solving #5302 .

However I'm not satisfied with it: Deduplicating what we have in SELECT statements seems kinda magic, and might not be what we want in some cases. Also, I believe this should be solved earlier in the compilation process.

I see a few things in the SQL output that could be solved:

  1. table_4 could be completely removed if FIRST_VALUE(my_concatenated_col) was directly selected as "new_name"
  2. CONCAT(col, ' ', other_col) AS my_concatenated_col and _expr_0 are not needed in table_1. I guess a solution I see here would be to process S-string tables with sqlparser to see if there is an explicit column selection. This would allow to not pass Wildcard around, and avoid the SELECT table_0.* in the final query.
  3. table_1 could just reference my_concatenated_col and _expr_0 by alias. Not sure how to pass the information "this expression has been evaluated in a previous CTE and does not need to be re-evaluated" around though.

@max-sixty do you have any ideas/hints on how I could move forward with this ? Thanks in advance!

@max-sixty

Copy link
Copy Markdown
Member

hi @lukapeschke, and thanks for the contribution!

is there an example of the proposed code behaving worse than the existing code? otherwise this seems like an upgrade...

(I agree it's not perfect, but making incremental improvements is still good...)

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

@max-sixty I've no example of this behaving worse than existing code.

You're right, we can proceed with incremental improvements. I simplified deduplicate_select_items to ensure the generated SQL query is valid, and added an extra alias to the test case to ensure it is taken into account in the final query.

I'll try to address the other issues in different PRs if that's okay with you ?

My next step will be to try to change FIRST_VALUE(name) AS _expr_0 to just _expr_0 in table_0, so the SQL query is valid

@lukapeschke
lukapeschke marked this pull request as ready for review May 27, 2025 08:52
@lukapeschke

lukapeschke commented May 27, 2025

Copy link
Copy Markdown
ContributorAuthor

#5310 adresses the second point in this comment. I guess this needs to be done earlier in the process to prevent _expr_0 from being selected, but I wasn't quite sure where exactly table declarations get created from s-strings

fixesPRQL#5302
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
…ple aliases work as expected in the test
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
@max-sixty

Copy link
Copy Markdown
Member

sorry I missed this @lukapeschke ! I missed a couple of others too, but am back & merging things!

I'll merge this. I'm a tiiiiny bit hesitant that we're just removing any duplicate columns — there may be times that people expect duplicate columns to persist, and ideally we'd solve this at a different stage in the compiler

but given where we're at, the result does seem better, and endlessly pushing off small improvements in the hope of fixing underlying compiler issues doesn't seem like a successful strategy :)

thank you for the contribution!

@max-sixty
max-sixty merged commit 3f2e21b into PRQL:mainJun 11, 2025
@lukapeschke
lukapeschke deleted the solve-5302 branch June 12, 2025 08:15
@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

Thanks a lot for the merge @max-sixty :)

I think I've finally found the underlying issue, details here: #5302 (comment)

I'm not really sure about how to proceed to fix it though, I'm not sure what the condition should be to determine if the sort columns should be reverted or not... Maybe you have an idea ?

Also, could you please re-open #5302 since it's not completely fixed yet ? I don't have the rights to do it

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

select in joined pipeline causes invalid expressions to be referenced

2 participants

@lukapeschke@max-sixty
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(prqlc): deduplicate selected items in gen_projection - #5305

Merged
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302
Jun 11, 2025
Merged

fix(prqlc): deduplicate selected items in gen_projection#5305
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302

Conversation

@lukapeschke

Copy link
Copy Markdown
Contributor

fixes#5302

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

After spending a while digging into the intermediary steps, this is my naive attempt at solving #5302 .

However I'm not satisfied with it: Deduplicating what we have in SELECT statements seems kinda magic, and might not be what we want in some cases. Also, I believe this should be solved earlier in the compilation process.

I see a few things in the SQL output that could be solved:

  1. table_4 could be completely removed if FIRST_VALUE(my_concatenated_col) was directly selected as "new_name"
  2. CONCAT(col, ' ', other_col) AS my_concatenated_col and _expr_0 are not needed in table_1. I guess a solution I see here would be to process S-string tables with sqlparser to see if there is an explicit column selection. This would allow to not pass Wildcard around, and avoid the SELECT table_0.* in the final query.
  3. table_1 could just reference my_concatenated_col and _expr_0 by alias. Not sure how to pass the information "this expression has been evaluated in a previous CTE and does not need to be re-evaluated" around though.

@max-sixty do you have any ideas/hints on how I could move forward with this ? Thanks in advance!

@max-sixty

Copy link
Copy Markdown
Member

hi @lukapeschke, and thanks for the contribution!

is there an example of the proposed code behaving worse than the existing code? otherwise this seems like an upgrade...

(I agree it's not perfect, but making incremental improvements is still good...)

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

@max-sixty I've no example of this behaving worse than existing code.

You're right, we can proceed with incremental improvements. I simplified deduplicate_select_items to ensure the generated SQL query is valid, and added an extra alias to the test case to ensure it is taken into account in the final query.

I'll try to address the other issues in different PRs if that's okay with you ?

My next step will be to try to change FIRST_VALUE(name) AS _expr_0 to just _expr_0 in table_0, so the SQL query is valid

@lukapeschke
lukapeschke marked this pull request as ready for review May 27, 2025 08:52
@lukapeschke

lukapeschke commented May 27, 2025

Copy link
Copy Markdown
ContributorAuthor

#5310 adresses the second point in this comment. I guess this needs to be done earlier in the process to prevent _expr_0 from being selected, but I wasn't quite sure where exactly table declarations get created from s-strings

fixesPRQL#5302
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
…ple aliases work as expected in the test
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
@max-sixty

Copy link
Copy Markdown
Member

sorry I missed this @lukapeschke ! I missed a couple of others too, but am back & merging things!

I'll merge this. I'm a tiiiiny bit hesitant that we're just removing any duplicate columns — there may be times that people expect duplicate columns to persist, and ideally we'd solve this at a different stage in the compiler

but given where we're at, the result does seem better, and endlessly pushing off small improvements in the hope of fixing underlying compiler issues doesn't seem like a successful strategy :)

thank you for the contribution!

@max-sixty
max-sixty merged commit 3f2e21b into PRQL:mainJun 11, 2025
@lukapeschke
lukapeschke deleted the solve-5302 branch June 12, 2025 08:15
@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

Thanks a lot for the merge @max-sixty :)

I think I've finally found the underlying issue, details here: #5302 (comment)

I'm not really sure about how to proceed to fix it though, I'm not sure what the condition should be to determine if the sort columns should be reverted or not... Maybe you have an idea ?

Also, could you please re-open #5302 since it's not completely fixed yet ? I don't have the rights to do it

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

select in joined pipeline causes invalid expressions to be referenced

2 participants

@lukapeschke@max-sixty
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(prqlc): deduplicate selected items in gen_projection - #5305

Merged
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302
Jun 11, 2025
Merged

fix(prqlc): deduplicate selected items in gen_projection#5305
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302

Conversation

@lukapeschke

Copy link
Copy Markdown
Contributor

fixes#5302

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

After spending a while digging into the intermediary steps, this is my naive attempt at solving #5302 .

However I'm not satisfied with it: Deduplicating what we have in SELECT statements seems kinda magic, and might not be what we want in some cases. Also, I believe this should be solved earlier in the compilation process.

I see a few things in the SQL output that could be solved:

  1. table_4 could be completely removed if FIRST_VALUE(my_concatenated_col) was directly selected as "new_name"
  2. CONCAT(col, ' ', other_col) AS my_concatenated_col and _expr_0 are not needed in table_1. I guess a solution I see here would be to process S-string tables with sqlparser to see if there is an explicit column selection. This would allow to not pass Wildcard around, and avoid the SELECT table_0.* in the final query.
  3. table_1 could just reference my_concatenated_col and _expr_0 by alias. Not sure how to pass the information "this expression has been evaluated in a previous CTE and does not need to be re-evaluated" around though.

@max-sixty do you have any ideas/hints on how I could move forward with this ? Thanks in advance!

@max-sixty

Copy link
Copy Markdown
Member

hi @lukapeschke, and thanks for the contribution!

is there an example of the proposed code behaving worse than the existing code? otherwise this seems like an upgrade...

(I agree it's not perfect, but making incremental improvements is still good...)

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

@max-sixty I've no example of this behaving worse than existing code.

You're right, we can proceed with incremental improvements. I simplified deduplicate_select_items to ensure the generated SQL query is valid, and added an extra alias to the test case to ensure it is taken into account in the final query.

I'll try to address the other issues in different PRs if that's okay with you ?

My next step will be to try to change FIRST_VALUE(name) AS _expr_0 to just _expr_0 in table_0, so the SQL query is valid

@lukapeschke
lukapeschke marked this pull request as ready for review May 27, 2025 08:52
@lukapeschke

lukapeschke commented May 27, 2025

Copy link
Copy Markdown
ContributorAuthor

#5310 adresses the second point in this comment. I guess this needs to be done earlier in the process to prevent _expr_0 from being selected, but I wasn't quite sure where exactly table declarations get created from s-strings

fixesPRQL#5302
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
…ple aliases work as expected in the test
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
@max-sixty

Copy link
Copy Markdown
Member

sorry I missed this @lukapeschke ! I missed a couple of others too, but am back & merging things!

I'll merge this. I'm a tiiiiny bit hesitant that we're just removing any duplicate columns — there may be times that people expect duplicate columns to persist, and ideally we'd solve this at a different stage in the compiler

but given where we're at, the result does seem better, and endlessly pushing off small improvements in the hope of fixing underlying compiler issues doesn't seem like a successful strategy :)

thank you for the contribution!

@max-sixty
max-sixty merged commit 3f2e21b into PRQL:mainJun 11, 2025
@lukapeschke
lukapeschke deleted the solve-5302 branch June 12, 2025 08:15
@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

Thanks a lot for the merge @max-sixty :)

I think I've finally found the underlying issue, details here: #5302 (comment)

I'm not really sure about how to proceed to fix it though, I'm not sure what the condition should be to determine if the sort columns should be reverted or not... Maybe you have an idea ?

Also, could you please re-open #5302 since it's not completely fixed yet ? I don't have the rights to do it

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

select in joined pipeline causes invalid expressions to be referenced

2 participants

@lukapeschke@max-sixty
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(prqlc): deduplicate selected items in gen_projection - #5305

Merged
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302
Jun 11, 2025
Merged

fix(prqlc): deduplicate selected items in gen_projection#5305
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302

Conversation

@lukapeschke

Copy link
Copy Markdown
Contributor

fixes#5302

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

After spending a while digging into the intermediary steps, this is my naive attempt at solving #5302 .

However I'm not satisfied with it: Deduplicating what we have in SELECT statements seems kinda magic, and might not be what we want in some cases. Also, I believe this should be solved earlier in the compilation process.

I see a few things in the SQL output that could be solved:

  1. table_4 could be completely removed if FIRST_VALUE(my_concatenated_col) was directly selected as "new_name"
  2. CONCAT(col, ' ', other_col) AS my_concatenated_col and _expr_0 are not needed in table_1. I guess a solution I see here would be to process S-string tables with sqlparser to see if there is an explicit column selection. This would allow to not pass Wildcard around, and avoid the SELECT table_0.* in the final query.
  3. table_1 could just reference my_concatenated_col and _expr_0 by alias. Not sure how to pass the information "this expression has been evaluated in a previous CTE and does not need to be re-evaluated" around though.

@max-sixty do you have any ideas/hints on how I could move forward with this ? Thanks in advance!

@max-sixty

Copy link
Copy Markdown
Member

hi @lukapeschke, and thanks for the contribution!

is there an example of the proposed code behaving worse than the existing code? otherwise this seems like an upgrade...

(I agree it's not perfect, but making incremental improvements is still good...)

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

@max-sixty I've no example of this behaving worse than existing code.

You're right, we can proceed with incremental improvements. I simplified deduplicate_select_items to ensure the generated SQL query is valid, and added an extra alias to the test case to ensure it is taken into account in the final query.

I'll try to address the other issues in different PRs if that's okay with you ?

My next step will be to try to change FIRST_VALUE(name) AS _expr_0 to just _expr_0 in table_0, so the SQL query is valid

@lukapeschke
lukapeschke marked this pull request as ready for review May 27, 2025 08:52
@lukapeschke

lukapeschke commented May 27, 2025

Copy link
Copy Markdown
ContributorAuthor

#5310 adresses the second point in this comment. I guess this needs to be done earlier in the process to prevent _expr_0 from being selected, but I wasn't quite sure where exactly table declarations get created from s-strings

fixesPRQL#5302
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
…ple aliases work as expected in the test
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
@max-sixty

Copy link
Copy Markdown
Member

sorry I missed this @lukapeschke ! I missed a couple of others too, but am back & merging things!

I'll merge this. I'm a tiiiiny bit hesitant that we're just removing any duplicate columns — there may be times that people expect duplicate columns to persist, and ideally we'd solve this at a different stage in the compiler

but given where we're at, the result does seem better, and endlessly pushing off small improvements in the hope of fixing underlying compiler issues doesn't seem like a successful strategy :)

thank you for the contribution!

@max-sixty
max-sixty merged commit 3f2e21b into PRQL:mainJun 11, 2025
@lukapeschke
lukapeschke deleted the solve-5302 branch June 12, 2025 08:15
@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

Thanks a lot for the merge @max-sixty :)

I think I've finally found the underlying issue, details here: #5302 (comment)

I'm not really sure about how to proceed to fix it though, I'm not sure what the condition should be to determine if the sort columns should be reverted or not... Maybe you have an idea ?

Also, could you please re-open #5302 since it's not completely fixed yet ? I don't have the rights to do it

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

select in joined pipeline causes invalid expressions to be referenced

2 participants

@lukapeschke@max-sixty
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(prqlc): deduplicate selected items in gen_projection - #5305

Merged
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302
Jun 11, 2025
Merged

fix(prqlc): deduplicate selected items in gen_projection#5305
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302

Conversation

@lukapeschke

Copy link
Copy Markdown
Contributor

fixes#5302

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

After spending a while digging into the intermediary steps, this is my naive attempt at solving #5302 .

However I'm not satisfied with it: Deduplicating what we have in SELECT statements seems kinda magic, and might not be what we want in some cases. Also, I believe this should be solved earlier in the compilation process.

I see a few things in the SQL output that could be solved:

  1. table_4 could be completely removed if FIRST_VALUE(my_concatenated_col) was directly selected as "new_name"
  2. CONCAT(col, ' ', other_col) AS my_concatenated_col and _expr_0 are not needed in table_1. I guess a solution I see here would be to process S-string tables with sqlparser to see if there is an explicit column selection. This would allow to not pass Wildcard around, and avoid the SELECT table_0.* in the final query.
  3. table_1 could just reference my_concatenated_col and _expr_0 by alias. Not sure how to pass the information "this expression has been evaluated in a previous CTE and does not need to be re-evaluated" around though.

@max-sixty do you have any ideas/hints on how I could move forward with this ? Thanks in advance!

@max-sixty

Copy link
Copy Markdown
Member

hi @lukapeschke, and thanks for the contribution!

is there an example of the proposed code behaving worse than the existing code? otherwise this seems like an upgrade...

(I agree it's not perfect, but making incremental improvements is still good...)

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

@max-sixty I've no example of this behaving worse than existing code.

You're right, we can proceed with incremental improvements. I simplified deduplicate_select_items to ensure the generated SQL query is valid, and added an extra alias to the test case to ensure it is taken into account in the final query.

I'll try to address the other issues in different PRs if that's okay with you ?

My next step will be to try to change FIRST_VALUE(name) AS _expr_0 to just _expr_0 in table_0, so the SQL query is valid

@lukapeschke
lukapeschke marked this pull request as ready for review May 27, 2025 08:52
@lukapeschke

lukapeschke commented May 27, 2025

Copy link
Copy Markdown
ContributorAuthor

#5310 adresses the second point in this comment. I guess this needs to be done earlier in the process to prevent _expr_0 from being selected, but I wasn't quite sure where exactly table declarations get created from s-strings

fixesPRQL#5302
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
…ple aliases work as expected in the test
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
@max-sixty

Copy link
Copy Markdown
Member

sorry I missed this @lukapeschke ! I missed a couple of others too, but am back & merging things!

I'll merge this. I'm a tiiiiny bit hesitant that we're just removing any duplicate columns — there may be times that people expect duplicate columns to persist, and ideally we'd solve this at a different stage in the compiler

but given where we're at, the result does seem better, and endlessly pushing off small improvements in the hope of fixing underlying compiler issues doesn't seem like a successful strategy :)

thank you for the contribution!

@max-sixty
max-sixty merged commit 3f2e21b into PRQL:mainJun 11, 2025
@lukapeschke
lukapeschke deleted the solve-5302 branch June 12, 2025 08:15
@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

Thanks a lot for the merge @max-sixty :)

I think I've finally found the underlying issue, details here: #5302 (comment)

I'm not really sure about how to proceed to fix it though, I'm not sure what the condition should be to determine if the sort columns should be reverted or not... Maybe you have an idea ?

Also, could you please re-open #5302 since it's not completely fixed yet ? I don't have the rights to do it

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

select in joined pipeline causes invalid expressions to be referenced

2 participants

@lukapeschke@max-sixty
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(prqlc): deduplicate selected items in gen_projection - #5305

Merged
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302
Jun 11, 2025
Merged

fix(prqlc): deduplicate selected items in gen_projection#5305
max-sixty merged 3 commits into
PRQL:mainfrom
lukapeschke:solve-5302

Conversation

@lukapeschke

Copy link
Copy Markdown
Contributor

fixes#5302

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

After spending a while digging into the intermediary steps, this is my naive attempt at solving #5302 .

However I'm not satisfied with it: Deduplicating what we have in SELECT statements seems kinda magic, and might not be what we want in some cases. Also, I believe this should be solved earlier in the compilation process.

I see a few things in the SQL output that could be solved:

  1. table_4 could be completely removed if FIRST_VALUE(my_concatenated_col) was directly selected as "new_name"
  2. CONCAT(col, ' ', other_col) AS my_concatenated_col and _expr_0 are not needed in table_1. I guess a solution I see here would be to process S-string tables with sqlparser to see if there is an explicit column selection. This would allow to not pass Wildcard around, and avoid the SELECT table_0.* in the final query.
  3. table_1 could just reference my_concatenated_col and _expr_0 by alias. Not sure how to pass the information "this expression has been evaluated in a previous CTE and does not need to be re-evaluated" around though.

@max-sixty do you have any ideas/hints on how I could move forward with this ? Thanks in advance!

@max-sixty

Copy link
Copy Markdown
Member

hi @lukapeschke, and thanks for the contribution!

is there an example of the proposed code behaving worse than the existing code? otherwise this seems like an upgrade...

(I agree it's not perfect, but making incremental improvements is still good...)

@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

@max-sixty I've no example of this behaving worse than existing code.

You're right, we can proceed with incremental improvements. I simplified deduplicate_select_items to ensure the generated SQL query is valid, and added an extra alias to the test case to ensure it is taken into account in the final query.

I'll try to address the other issues in different PRs if that's okay with you ?

My next step will be to try to change FIRST_VALUE(name) AS _expr_0 to just _expr_0 in table_0, so the SQL query is valid

@lukapeschke
lukapeschke marked this pull request as ready for review May 27, 2025 08:52
@lukapeschke

lukapeschke commented May 27, 2025

Copy link
Copy Markdown
ContributorAuthor

#5310 adresses the second point in this comment. I guess this needs to be done earlier in the process to prevent _expr_0 from being selected, but I wasn't quite sure where exactly table declarations get created from s-strings

fixesPRQL#5302
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
…ple aliases work as expected in the test
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
Signed-off-by: Luka Peschke <mail@lukapeschke.com>
@max-sixty

Copy link
Copy Markdown
Member

sorry I missed this @lukapeschke ! I missed a couple of others too, but am back & merging things!

I'll merge this. I'm a tiiiiny bit hesitant that we're just removing any duplicate columns — there may be times that people expect duplicate columns to persist, and ideally we'd solve this at a different stage in the compiler

but given where we're at, the result does seem better, and endlessly pushing off small improvements in the hope of fixing underlying compiler issues doesn't seem like a successful strategy :)

thank you for the contribution!

@max-sixty
max-sixty merged commit 3f2e21b into PRQL:mainJun 11, 2025
@lukapeschke
lukapeschke deleted the solve-5302 branch June 12, 2025 08:15
@lukapeschke

Copy link
Copy Markdown
ContributorAuthor

Thanks a lot for the merge @max-sixty :)

I think I've finally found the underlying issue, details here: #5302 (comment)

I'm not really sure about how to proceed to fix it though, I'm not sure what the condition should be to determine if the sort columns should be reverted or not... Maybe you have an idea ?

Also, could you please re-open #5302 since it's not completely fixed yet ? I don't have the rights to do it

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

select in joined pipeline causes invalid expressions to be referenced

2 participants

@lukapeschke@max-sixty