Skip to content

Commit

Permalink
add a test
Browse files Browse the repository at this point in the history
  • Loading branch information
swalrus1 committed Aug 19, 2024
1 parent 20635ca commit 9443c7e
Show file tree
Hide file tree
Showing 6 changed files with 523 additions and 6 deletions.
3 changes: 2 additions & 1 deletion ydb/tests/olap/scenario/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ def get_suite_name(cls):

@classmethod
def setup_class(cls):
ScenarioTestHelper(None).remove_path(cls.get_suite_name())
if not external_param_is_true('reuse-tables'):
ScenarioTestHelper(None).remove_path(cls.get_suite_name())

@classmethod
def teardown_class(cls):
Expand Down
26 changes: 21 additions & 5 deletions ydb/tests/olap/scenario/helpers/data_generators.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,30 @@ def next_row(self) -> None:
pass


class ColumnValueGeneratorNull(IColumnValueGenerator):
"""NULL column value generator.
class ColumnValueGeneratorConst(IColumnValueGenerator):
"""Const column value generator.
Allways generate NULL value."""
Allways generate specified value."""

def __init__(self, value: Any) -> None:
"""Constructor.
Args:
value: Value to generate.
Example:
DataGeneratorPerColumn(
self.schema2, 10,
ColumnValueGeneratorDefault(init_value=10))
.with_column('not_level', ColumnValueGeneratorConst(42)
)
"""

super().__init__()
self._value = value

@override
def generate_value(column: ScenarioTestHelper.Column) -> Any:
return None
def generate_value(self, column: ScenarioTestHelper.Column) -> Any:
return self._value


class ColumnValueGeneratorRandom(IColumnValueGenerator):
Expand Down
99 changes: 99 additions & 0 deletions ydb/tests/olap/scenario/helpers/table_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,69 @@ def title(self) -> str:
return f'drop column `{self._column}`'


class SetSetting(AlterTableAction):
"""Set a setting value for a table-like object.
Table-like objects are Tables and TableStore.
See {AlterTableLikeObject}.
Example:
sth = ScenarioTestHelper(ctx)
sth.execute_scheme_query(
AlterTable('testTable').action(SetSetting('TIERING', 'tiering1))
)
"""

def __init__(self, setting: str, value_literal: str) -> None:
"""Constructor.
Args:
column: Name of the column to be deleted."""

super().__init__()
self._setting = setting
self._value = value_literal

@override
def to_yql(self) -> str:
return f'SET {self._setting} {self._value}'

@override
def title(self) -> str:
return f'set {self._setting} = {self._value}'


class ResetSetting(AlterTableAction):
"""Reset value of a setting for a table-like object.
Table-like objects are Tables and TableStore.
See {AlterTableLikeObject}.
Example:
sth = ScenarioTestHelper(ctx)
sth.execute_scheme_query(
AlterTable('testTable').action(ResetSetting('TIERING'))
)
"""

def __init__(self, setting: str) -> None:
"""Constructor.
Args:
setting: Name of altered setting."""

super().__init__()
self._setting = setting

@override
def to_yql(self) -> str:
return f'RESET ({self._setting})'

@override
def title(self) -> str:
return f'reset {self._setting}'


class AlterTableLikeObject(ScenarioTestHelper.IYqlble):
"""The base class for all requests to change table-like objects.
Expand Down Expand Up @@ -277,6 +340,42 @@ def drop_column(self, column: str) -> AlterTableLikeObject:

return self(DropColumn(column))

def set_tiering(self, tiering_rule: str) -> AlterTableLikeObject:
"""Set a tiering policy.
The method is similar to calling {AlterTableLikeObject.action} with a {SetSetting} instance.
Args:
tiering_rule: Name of a TIERING_RULE object.
Returns:
self."""

return self(SetSetting('TIERING', f'"{tiering_rule}"'))

def reset_tiering(self) -> AlterTableLikeObject:
"""Remove a tiering policy.
The method is similar to calling {AlterTableLikeObject.action} with a {SetSetting} instance.
Returns:
self."""

return self(ResetSetting('TIERING'))

def set_ttl(self, interval: str, column: str) -> AlterTableLikeObject:
"""Set TTL for rows.
The method is similar to calling {AlterTableLikeObject.action} with a {SetSetting} instance.
Args:
tiering_rule: Name of a TIERING_RULE object.
Returns:
self."""

return self(SetSetting('TTL', f'Interval("{interval}") ON `{column}`'))

@override
def params(self) -> Dict[str, str]:
return {self._type(): self._name, 'actions': ', '.join([a.title() for a in self._actions])}
Expand Down
Loading

0 comments on commit 9443c7e

Please sign in to comment.