2025-01-28 10:18:57 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
2025-01-30 20:34:44 +01:00
|
|
|
from typing import Optional, Iterable, Any
|
2025-01-28 10:18:57 +01:00
|
|
|
|
|
|
|
|
class ColumnSet: # export
|
|
|
|
|
|
2025-01-30 20:34:44 +01:00
|
|
|
def __init__(self, *args: list[Any], columns: list[Any]=[], table: Optional[Any]=None, names: Optional[list[str]]=None):
|
|
|
|
|
self.__columns: list[Any] = [*args]
|
2025-01-28 10:18:57 +01:00
|
|
|
self.__columns.extend(columns)
|
|
|
|
|
self.__table = table
|
|
|
|
|
if names is not None:
|
|
|
|
|
assert(table is not None)
|
|
|
|
|
for name in names:
|
|
|
|
|
self.__columns.append(table.column(name))
|
|
|
|
|
if self.__table is not None:
|
|
|
|
|
for col in columns:
|
|
|
|
|
assert(col.table == self.__table)
|
|
|
|
|
|
|
|
|
|
def __len__(self):
|
|
|
|
|
return len(self.__columns)
|
|
|
|
|
|
|
|
|
|
def __iter__(self):
|
|
|
|
|
yield from self.__columns
|
|
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
|
return '|'.join([col.name for col in self.__columns])
|
|
|
|
|
|
|
|
|
|
def __getitem__(self, index):
|
|
|
|
|
return self.__columns[index]
|
|
|
|
|
|
|
|
|
|
def __eq__(self, rhs):
|
|
|
|
|
if self.__table != rhs.__table:
|
|
|
|
|
return False
|
|
|
|
|
if len(self.__columns) != len(rhs.__columns):
|
|
|
|
|
return False
|
|
|
|
|
for i in range(0, len(self.__columns)):
|
|
|
|
|
if self.__columns[i].name != rhs.__columns[i].name:
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
@property
|
2025-01-30 20:34:44 +01:00
|
|
|
def columns(self) -> list[Any]:
|
2025-01-28 10:18:57 +01:00
|
|
|
return self.__columns
|