LINUX.ORG.RU

История изменений

Исправление NitroJunkie, (текущая версия) :

SELECT 
  ...
  FROM Registry
  LEFT JOIN Product ON Registry.Subcount1Type = &ProductType
    AND Registry.Subcount1Value = Product.Id
  LEFT JOIN Clients ON Registry.Subcount1Type = &ClientsType
    AND Registry.Subcount1Value = Clients.Id
  ...

Ну это как раз странный пример. Потому в PostgreSQL (и lsFusion) проблема не в классах, а в типах, то есть когда у вас одно поле скажем строка, дата или объект.

В данном случае, можно просто поле Subcount1Value абстрактного класса Object сделать. И в lsFusion тогда будут просто разные свойства.

// тут возможно для resolving'а надо будет или cast (то есть Subcount1Value(r) AS Client) или явный класс указать (то есть phone[Client](Subcount1Value(r))), если у вас много свойств phone в данном namespace

clientPhone(r) = IF Subcount1Type(r) = Type.Client THEN phone(Subcount1Value(r)) 

productBarcode(r) = IF Subcount1Type(r) = Type.Product THEN barcode(Subcount1Value(r)) // аналогично верхнему

А дальше если вы их используете вместе платформа сама скомпилирует их в что-то типа как у вас, скажем если будет так на lsFusion:

EXPORT FROM clientPhone(Registry r), productBarcode(Registry r);

Исправление NitroJunkie, :

SELECT 
  ...
  FROM Registry
  LEFT JOIN Product ON Registry.Subcount1Type = &ProductType
    AND Registry.Subcount1Value = Product.Id
  LEFT JOIN Clients ON Registry.Subcount1Type = &ClientsType
    AND Registry.Subcount1Value = Clients.Id
  ...

Ну это как раз странный пример. Потому в PostgreSQL (и lsFusion) проблема не в классах, а в типах, то есть когда у вас одно поле скажем строка, дата или объект.

В данном случае, можно просто поле Subcount1Value абстрактного класса Object сделать. И в lsFusion тогда будут просто разные свойства.

// тут возможно для resolving'а надо будет или cast (то есть Subcount1Value(r) AS Client) или явный класс указать (то есть phone[Client](Subcount1Value(r))), если у вас много свойств phone в данном namespace

clientPhone(r) = IF Subcount1Value(r) = Type.Client THEN phone(Subcount1Value(r)) 

productBarcode(r) = IF Subcount1Value(r) = Type.Product THEN barcode(Subcount1Value(r)) // аналогично верхнему

А дальше если вы их используете вместе платформа сама скомпилирует их в что-то типа как у вас, скажем если будет так на lsFusion:

EXPORT FROM clientPhone(Registry r), productBarcode(Registry r);

Исправление NitroJunkie, :

SELECT 
  ...
  FROM Registry
  LEFT JOIN Product ON Registry.Subcount1Type = &ProductType
    AND Registry.Subcount1Value = Product.Id
  LEFT JOIN Clients ON Registry.Subcount1Type = &ClientsType
    AND Registry.Subcount1Value = Clients.Id
  ...

Ну это как раз странный пример. Потому в PostgreSQL (и lsFusion) проблема не в классах, а в типах, то есть когда у вас одно поле скажем строка, дата или объект.

В данном случае, можно просто поле Subcount1Value абстрактного класса Object сделать. И в lsFusion тогда будут просто разные свойства.

// тут возможно для resolving'а надо будет или cast (то есть Subcount1Value(r) AS Client) или явный класс указать (то есть phone[Client](Subcount1Value(r))), если у вас много свойств phone в данном namespace
clientPhone(r) = IF Subcount1Value(r) = Type.Client THEN phone(Subcount1Value(r)) 

productBarcode(r) = IF Subcount1Value(r) = Type.Product THEN barcode(Subcount1Value(r)) // аналогично верхнему

А дальше если вы их используете вместе платформа сама скомпилирует их в что-то типа как у вас, скажем если будет так на lsFusion:

EXPORT FROM clientPhone(Registry r), productBarcode(Registry r);

Исходная версия NitroJunkie, :

SELECT 
  ...
  FROM Registry
  LEFT JOIN Product ON Registry.Subcount1Type = &ProductType
    AND Registry.Subcount1Value = Product.Id
  LEFT JOIN Clients ON Registry.Subcount1Type = &ClientsType
    AND Registry.Subcount1Value = Clients.Id
  ...

Ну это как раз странный пример. Потому в PostgreSQL (и lsFusion) проблема не в классах, а в типах, то есть когда у вас одно поле скажем строка, дата или объект.

В данном случае, можно просто поле Subcount1Value абстрактного класса Object сделать. И в lsFusion тогда будут просто разные свойства.

clientPhone(r) = IF Subcount1Value(r) = Type.Client THEN phone(Subcount1Value(r)) // тут возможно для resolving'а надо будет или cast (то есть Subcount1Value(r) AS Client) или явный класс указать (то есть phone[Client](Subcount1Value(r)))

productBarcode(r) = IF Subcount1Value(r) = Type.Product THEN barcode(Subcount1Value(r)) // аналогично верхнему

А дальше если вы их используете вместе платформа сама скомпилирует их в что-то типа как у вас, скажем если будет так на lsFusion:

EXPORT FROM clientPhone(Registry r), productBarcode(Registry r);