Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build-cloudberry.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1679,7 +1679,7 @@ jobs:
echo "Found results directory: $results_dir" | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
echo "Contents of results directory:" | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log

find "$results_dir" -type f -ls >> "$log_file" 2>&1 | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
find "$results_dir" -type f -ls 2>&1 | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
echo "-----------------------------------------" | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
else
echo "-----------------------------------------"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-dbg-cloudberry.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1220,7 +1220,7 @@ jobs:
echo "Found results directory: $results_dir" | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
echo "Contents of results directory:" | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log

find "$results_dir" -type f -ls >> "$log_file" 2>&1 | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
find "$results_dir" -type f -ls 2>&1 | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
echo "-----------------------------------------" | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
else
echo "-----------------------------------------"
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/build-deb-cloudberry.yml
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ jobs:
# Determine ubuntu versions
UBUNTU_INPUT="${{ github.event.inputs.ubuntu_version }}"
if [[ "$UBUNTU_INPUT" == "all" || -z "$UBUNTU_INPUT" ]]; then
UBUNTU_VERSIONS_JSON='["22.04","24.04"]'
UBUNTU_VERSIONS_JSON='["22.04","24.04","26.04"]'
else
UBUNTU_VERSIONS_JSON=$(echo "$UBUNTU_INPUT" | jq -R 'split(",") | map(gsub("\\s+";"")) | map(select(length > 0)) | unique')
fi
Expand Down Expand Up @@ -378,7 +378,7 @@ jobs:
strategy:
fail-fast: false
matrix:
ubuntu_version: ['22.04', '24.04']
ubuntu_version: ['22.04', '24.04', '26.04']

container:
image: apache/incubator-cloudberry:cbdb-build-ubuntu${{ matrix.ubuntu_version }}-latest
Expand Down Expand Up @@ -706,7 +706,7 @@ jobs:
strategy:
fail-fast: false
matrix:
ubuntu_version: ['22.04', '24.04']
ubuntu_version: ['22.04', '24.04', '26.04']

container:
image: apache/incubator-cloudberry:cbdb-test-ubuntu${{ matrix.ubuntu_version }}-latest
Expand Down Expand Up @@ -1482,7 +1482,7 @@ jobs:
echo "Found results directory: $results_dir" | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
echo "Contents of results directory:" | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log

find "$results_dir" -type f -ls >> "$log_file" 2>&1 | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
find "$results_dir" -type f -ls 2>&1 | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
echo "-----------------------------------------" | tee -a build-logs/details/make-${{ matrix.test }}-config$i-results.log
else
echo "-----------------------------------------"
Expand Down
2 changes: 1 addition & 1 deletion contrib/try_convert/scripts/check_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
preline = lines[i-1]
line = lines[i]
if len(line) > 0 and len(preline) > 0 and (line[0] == '-' or line[0] == '+') and (preline[0] != '-' and preline[0] != '+'):
words = re.split('::|\*|;|\n| |\(|\)|,|\.|\".*\"|\'.*\'|<.*>', preline)
words = re.split('::|\\*|;|\n| |\\(|\\)|,|\\.|\".*\"|\'.*\'|<.*>', preline)
ans = []
is_prining = False
for word in words:
Expand Down
12 changes: 6 additions & 6 deletions contrib/try_convert/scripts/error_safe_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@

import os, glob

p_any = '(?:\S| |\t|\n+\t|\n+ |\n+#|\n+/|\n+\$)+?'
p_spaces = '\s*'
p_any = '(?:\\S| |\t|\n+\t|\n+ |\n+#|\n+/|\n+\\$)+?'
p_spaces = '\\s*'

def create_pattern(funcCall):
return '\n(\w+)\s+?(\w+)' + p_spaces + '\((' + p_any + ')\)' + p_spaces + '(\n\{' + '(' + p_any + ')' + f'({funcCall})' + '\s*' + '(' + p_any + ')' + '\n+\})'
return '\n(\\w+)\\s+?(\\w+)' + p_spaces + '\\((' + p_any + ')\\)' + p_spaces + '(\n\\{' + '(' + p_any + ')' + f'({funcCall})' + '\\s*' + '(' + p_any + ')' + '\n+\\})'

pattern = create_pattern('ereturn')

Expand Down Expand Up @@ -100,9 +100,9 @@ def find_functions_with_call(functions):

if m[5] != 'ereturn':
func_call = m[4][-20:] + m[5] + m[6][:20]
safe_call_pattern = f'if{p_spaces}\(!{m[5]}\({p_any}\)\)'
safe_call_void_pattern = f'\(void\){p_spaces}{m[5]}\({p_any}\)\)'
direct_safe_call_pattern = f'DirectFunctionCall1Safe\({m[5]}'
safe_call_pattern = f'if{p_spaces}\\(!{m[5]}\\({p_any}\\)\\)'
safe_call_void_pattern = f'\\(void\\){p_spaces}{m[5]}\\({p_any}\\)\\)'
direct_safe_call_pattern = f'DirectFunctionCall1Safe\\({m[5]}'
if re.search(safe_call_pattern, func_call) is None and \
re.search(safe_call_void_pattern, func_call) is None and \
re.search(direct_safe_call_pattern, func_call) is None:
Expand Down
14 changes: 7 additions & 7 deletions contrib/try_convert/scripts/find_calls.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,22 @@

from general import source_filenames

p_any = '(?:\S| |\t|\n+\t|\n+ |\n+#|\n+/|\n+\$)+?'
p_spaces = '\s*'
p_space = '\s+'
p_any = '(?:\\S| |\t|\n+\t|\n+ |\n+#|\n+/|\n+\\$)+?'
p_spaces = '\\s*'
p_space = '\\s+'


def remove_comments(body):
body = re.sub('".*?"', '""', body)
body = re.sub('/\*[\s\S]*?\*/', '/* */', body)
body = re.sub('/\\*[\\s\\S]*?\\*/', '/* */', body)
return body

def find_functions(func_names, text):

func_names_pattern_list = '|'.join(func_names)
func_names_pattern = f'((?:{func_names_pattern_list}))'

func_pattern = '\n(\w+)\s+?' + func_names_pattern + p_spaces + '\((' + p_any + ')\)' + p_spaces + '(\n\{' + '(' + p_any + ')' + '\n+\})'
func_pattern = '\n(\\w+)\\s+?' + func_names_pattern + p_spaces + '\\((' + p_any + ')\\)' + p_spaces + '(\n\\{' + '(' + p_any + ')' + '\n+\\})'

funcs = []

Expand All @@ -50,7 +50,7 @@ def find_functions(func_names, text):

def find_safe_functions(text):

func_pattern = '\n((?:\w+\s+)+)(\w+)' + p_spaces + '\((' + p_any + 'Node' + p_spaces + '\*' + p_spaces + 'escontext' + ')\)' + p_spaces + '(\n\{' + '(' + p_any + ')' + '\n+\})'
func_pattern = '\n((?:\\w+\\s+)+)(\\w+)' + p_spaces + '\\((' + p_any + 'Node' + p_spaces + '\\*' + p_spaces + 'escontext' + ')\\)' + p_spaces + '(\n\\{' + '(' + p_any + ')' + '\n+\\})'

funcs = []

Expand All @@ -62,7 +62,7 @@ def find_safe_functions(text):
return funcs

def create_pattern(funcCall):
return '\n((?:\w+\s+)+)(\w+)' + p_spaces + '\((' + p_any + ')\)' + p_spaces + '(\n\{' + '(' + p_any + ')' + '\W' + f'({funcCall})' + '\W' + '(' + p_any + ')' + '\n+\})'
return '\n((?:\\w+\\s+)+)(\\w+)' + p_spaces + '\\((' + p_any + ')\\)' + p_spaces + '(\n\\{' + '(' + p_any + ')' + '\\W' + f'({funcCall})' + '\\W' + '(' + p_any + ')' + '\n+\\})'


def find_functions_with_call(functions):
Expand Down
12 changes: 6 additions & 6 deletions contrib/try_convert/scripts/find_casts.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ def get_extensions():
return create_casts, dict(create_functions)

def find_create_casts_in_text(text):
create_cast_pattern = 'CREATE CAST\s*\((\w+) AS (\w+)\)\s*([\w\s\(\)]+);'
create_cast_pattern = 'CREATE CAST\\s*\\((\\w+) AS (\\w+)\\)\\s*([\\w\\s\\(\\)]+);'
create_casts = []

for target, source, f in re.findall(create_cast_pattern, text):
Expand All @@ -159,29 +159,29 @@ def find_create_casts_in_text(text):
if re.match('WITHOUT FUNCTION', f) is not None:
create_casts += [(target, source, 'WITHOUT FUNCTION')]

m = re.match('WITH FUNCTION ([\w\(\)]+)', f)
m = re.match('WITH FUNCTION ([\\w\\(\\)]+)', f)
if m is not None:
# print(m[1])
create_casts += [(target, source, m[1])]

return create_casts

p_space = '\s+'
p_space = '\\s+'

def find_create_function_in_text(text):
create_function_pattern = 'CREATE FUNCTION' + p_space + '(\w+)\([\w\s,]+\)' + p_space + 'RETURNS' + p_space + '\w+' + p_space + 'AS' + p_space + '([\',\w\s]+)' + p_space + 'LANGUAGE[\w\s,]+;'
create_function_pattern = 'CREATE FUNCTION' + p_space + '(\\w+)\\([\\w\\s,]+\\)' + p_space + 'RETURNS' + p_space + '\\w+' + p_space + 'AS' + p_space + '([\',\\w\\s]+)' + p_space + 'LANGUAGE[\\w\\s,]+;'
create_functions = {}

for sql_name, c_obj in re.findall(create_function_pattern, text):
# print(target, source, f)

m = re.fullmatch("\'(\w+)\'", c_obj)
m = re.fullmatch("\'(\\w+)\'", c_obj)
if m is not None:
c_name = m[1]
create_functions[sql_name] = c_name
continue

m = re.fullmatch("\'MODULE_PATHNAME\',\s+\'(\w+)\'", c_obj)
m = re.fullmatch("\'MODULE_PATHNAME\',\\s+\'(\\w+)\'", c_obj)
if m is not None:
c_name = m[1]
create_functions[sql_name] = c_name
Expand Down
12 changes: 6 additions & 6 deletions contrib/try_convert/scripts/find_ereturns.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@

from general import source_filenames

p_any = '(?:\S| |\t|\n+\t|\n+ |\n+#|\n+/|\n+\$)+?'
p_anys = '(?:\S| |\t|\n+\t|\n+ |\n+#|\n+/|\n+\$)*?'
p_spaces = '\s*'
p_space = '\s+'
p_any = '(?:\\S| |\t|\n+\t|\n+ |\n+#|\n+/|\n+\\$)+?'
p_anys = '(?:\\S| |\t|\n+\t|\n+ |\n+#|\n+/|\n+\\$)*?'
p_spaces = '\\s*'
p_space = '\\s+'

ereturn_pattern = 'ereturn\(' + p_any + '\);'
ereturn_pattern = 'ereturn\\(' + p_any + '\\);'

ereturns = {}

Expand All @@ -46,7 +46,7 @@
for m in matches:

def get_field(field, m):
errfield = re.search(f'{field}\("('+ p_anys + '"' + p_anys + ')[\)\n]', m)
errfield = re.search(f'{field}\\("('+ p_anys + '"' + p_anys + ')[\\)\n]', m)
if errfield is not None:
errfield = errfield[1]

Expand Down
12 changes: 6 additions & 6 deletions contrib/try_convert/scripts/verify.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ def filter_supported_casts(casts):
if cast[2] != 'WITH INOUT' and cast[2] != 'WITHOUT FUNCTION':
sql_func_name = cast[2]

m = re.match('(\w+)\(', sql_func_name)
m = re.match('(\\w+)\\(', sql_func_name)
if m is not None:
sql_func_name = m[1]

Expand Down Expand Up @@ -211,11 +211,11 @@ def filter_supported_casts(casts):
if re.search(r'bool', return_type) is None:
print(f' WARNING: safe function {name} returns result not bool')

m = re.match('(\w+)Safe', name)
m = re.match('(\\w+)Safe', name)
if m is not None:
loaded_null_functions[m[1]] = 1

m = re.match('(\w+)_safe', name)
m = re.match('(\\w+)_safe', name)
if m is not None:
loaded_null_functions[m[1]] = 1

Expand All @@ -233,14 +233,14 @@ def filter_supported_casts(casts):

from find_calls import get_all_functions_with

ereport_functions = get_all_functions_with('ereport\(ERROR,')
ereport_functions = get_all_functions_with('ereport\\(ERROR,')

unsafe_convert_functions = {}

for func_name in loaded_functions:
body = loaded_functions[func_name]

pattern_call = '(\w+)\s*\(([\s\S]*?)\)'
pattern_call = '(\\w+)\\s*\\(([\\s\\S]*?)\\)'

for token_match in re.finditer(pattern_call, body):

Expand Down Expand Up @@ -276,7 +276,7 @@ def filter_supported_casts(casts):
for func_name in loaded_functions:
body = loaded_functions[func_name]

pattern_call = '\w+'
pattern_call = '\\w+'

for token_match in re.finditer(pattern_call, body):

Expand Down
6 changes: 6 additions & 0 deletions devops/build/packaging/deb/ubuntu26.04/changelog
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apache-cloudberry-db-incubating (2.0.0) resolute; urgency=medium

* Initial release.

-- Cloudberry Team <dev@cloudberry.apache.org> Wed, 26 Mar 2025 11:10:44 +0000

2 changes: 2 additions & 0 deletions devops/build/packaging/deb/ubuntu26.04/compat
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
9

109 changes: 109 additions & 0 deletions devops/build/packaging/deb/ubuntu26.04/control
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
Source: apache-cloudberry-db-incubating
Maintainer: Apache Cloudberry (Incubating) <dev@cloudberry.apache.org>
Section: database
Build-Depends: debhelper (>= 9),
bison,
ca-certificates-java,
ca-certificates,
cmake,
curl,
cgroup-tools,
flex,
gcc-15,
g++-15,
git,
krb5-multidev,
libapr1-dev,
libbz2-dev,
libcurl4-gnutls-dev,
libevent-dev,
libkrb5-dev,
libldap-dev,
libperl-dev,
libreadline-dev,
libssl-dev,
libxml2-dev,
libyaml-dev,
libzstd-dev,
libaprutil1-dev,
libpam0g-dev,
libpam0g,
libcgroup3,
libyaml-0-2,
libldap2,
libssl3t64,
libxerces-c-dev,
libxerces-c3.2t64,
ninja-build,
quilt,
unzip,
wget,
zlib1g-dev,
libuv1-dev

Package: apache-cloudberry-db-incubating
Provides: apache-cloudberry-db
Architecture: any
Depends: curl,
cgroup-tools,
debianutils,
hostname,
iputils-ping,
iproute2,
keyutils,
krb5-multidev,
less,
libapr1t64,
libbz2-1.0,
libcurl4t64,
libcurl3t64-gnutls,
libevent-2.1-7t64,
libreadline8t64,
libxml2-16,
libyaml-0-2,
libldap2,
libzstd1,
libcgroup3,
libssl3t64,
libpam0g,
libprotobuf32t64,
libpsl5t64,
libuv1t64,
liburing2,
libxerces-c3.2t64,
locales,
lsof,
lz4,
net-tools,
openssh-client,
openssh-server,
openssl,
python3,
rsync,
wget,
xz-utils,
zlib1g
Description: Apache Cloudberry (incubating) is an advanced, open-source, massively
parallel processing (MPP) data warehouse developed from PostgreSQL and
Greenplum. It is designed for high-performance analytics on
large-scale data sets, offering powerful analytical capabilities and
enhanced security features.
Key Features:
- Massively parallel processing for optimized performance
- Advanced analytics for complex data processing
- Integration with ETL and BI tools
- Compatibility with multiple data sources and formats
- Enhanced security features
Apache Cloudberry supports both batch processing and real-time data
warehousing, making it a versatile solution for modern data
environments.
Apache Cloudberry (incubating) is an effort undergoing incubation at
the Apache Software Foundation (ASF), sponsored by the Apache
Incubator PMC.
Incubation is required of all newly accepted projects until a further
review indicates that the infrastructure, communications, and decision
making process have stabilized in a manner consistent with other
successful ASF projects.
While incubation status is not necessarily a reflection of the
completeness or stability of the code, it does indicate that the
project has yet to be fully endorsed by the ASF.
2 changes: 2 additions & 0 deletions devops/build/packaging/deb/ubuntu26.04/install
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
debian/build/* /usr/cloudberry-db

13 changes: 13 additions & 0 deletions devops/build/packaging/deb/ubuntu26.04/postinst
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash

set -e

GPADMIN=gpadmin
GPHOME=/usr/cloudberry-db

if [ "$1" = configure ]; then

ln -sf ${GPHOME} /usr/local/cloudberry-db

fi

Loading
Loading