MCPcopy Create free account
hub / github.com/PostHog/duckgres / outerStatementOfCTE

Function outerStatementOfCTE

server/conn.go:1993–2069  ·  view source on GitHub ↗

outerStatementOfCTE returns the portion of an uppercased query after all CTE definitions, or "" if the query doesn't start with WITH. For "WITH a AS (...) SELECT ...", it returns "SELECT ...".

(upper string)

Source from the content-addressed store, hash-verified

1991 strings.HasPrefix(s, "WITH") ||
1992 strings.HasPrefix(s, "VALUES") ||
1993 strings.HasPrefix(s, "TABLE") ||
1994 strings.HasPrefix(s, "FROM") // DuckDB FROM-first syntax
1995}
1996
1997// queryReturnsResults checks if a SQL query returns a result set.
1998// This is used to determine whether to send RowDescription or NoData.
1999func queryReturnsResults(query string) bool {
2000 upper := strings.ToUpper(stripLeadingNoise(query))
2001 // SELECT is the most common
2002 if strings.HasPrefix(upper, "SELECT") {
2003 return true
2004 }
2005 // WITH ... SELECT (CTEs)
2006 if strings.HasPrefix(upper, "WITH") && (len(upper) == 4 || isWSChar(upper[4]) || upper[4] == '/' || upper[4] == '-') {
2007 return true
2008 }
2009 // VALUES clause returns rows
2010 if strings.HasPrefix(upper, "VALUES") {
2011 return true
2012 }
2013 // SHOW commands return results
2014 if strings.HasPrefix(upper, "SHOW") {
2015 return true
2016 }
2017 // TABLE is shorthand for SELECT * FROM table
2018 if strings.HasPrefix(upper, "TABLE") {
2019 return true
2020 }
2021 // EXECUTE can return results if the prepared statement is a SELECT
2022 if strings.HasPrefix(upper, "EXECUTE") {
2023 return true
2024 }
2025 // EXPLAIN returns results
2026 if strings.HasPrefix(upper, "EXPLAIN") {
2027 return true
2028 }
2029 // DESCRIBE returns results (DuckDB-specific)
2030 if strings.HasPrefix(upper, "DESCRIBE") {
2031 return true
2032 }
2033 // SUMMARIZE returns results (DuckDB-specific)
2034 if strings.HasPrefix(upper, "SUMMARIZE") {
2035 return true
2036 }
2037 // FROM-first syntax returns results (DuckDB-specific)
2038 if strings.HasPrefix(upper, "FROM") {
2039 return true
2040 }
2041 // DML with RETURNING clause produces result rows.
2042 // Check for RETURNING preceded by any whitespace (space, newline, tab).
2043 if (strings.HasPrefix(upper, "INSERT") ||
2044 strings.HasPrefix(upper, "UPDATE") ||
2045 strings.HasPrefix(upper, "DELETE")) &&
2046 containsReturning(upper) {
2047 return true
2048 }
2049 return false
2050}

Callers 2

isWithDMLFunction · 0.85
getCommandTypeMethod · 0.85

Calls 3

isWSCharFunction · 0.85
skipBalancedParensFunction · 0.85

Tested by

no test coverage detected