All files / src/abap/types/basic table_type.ts

95.77% Statements 68/71
90.9% Branches 10/11
90% Functions 9/10
95.77% Lines 68/71

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 711x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 440x 440x 440x 440x 1x 1x 4x 4x 1x 1x 241x 241x 1x 1x 4x 4x 1x 1x 686x 686x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x   4x 4x 4x 4x 1x 1x 91x 91x 1x 1x 8x 8x 1x 1x     1x
import {AbstractType} from "./_abstract_type";
 
export enum TableAccessType {
  standard = "STANDARD",
  sorted = "SORTED",
  hashed = "HASHED",
  index = "INDEX",
  any = "ANY",
}
 
// todo, handling of secondary keys
export type ITableOptions = {
  type?: TableAccessType,
  keyFields?: string[],
  isUnique?: boolean,
  withHeader: boolean,
};
 
export class TableType extends AbstractType {
  private readonly rowType: AbstractType;
  private readonly options: ITableOptions;
 
  public constructor(rowType: AbstractType, options: ITableOptions, qualifiedName?: string) {
    super(qualifiedName);
    this.rowType = rowType;
    this.options = options;
  }
 
  public getOptions(): ITableOptions {
    return this.options;
  }
 
  public isWithHeader(): boolean {
    return this.options.withHeader;
  }
 
  public getAccessType(): TableAccessType | undefined {
    return this.options.type;
  }
 
  public getRowType(): AbstractType {
    return this.rowType;
  }
 
  public toABAP(): string {
// this is used for downport, so use default key for now
    return "STANDARD TABLE OF " + this.rowType.toABAP() + " WITH DEFAULT KEY";
  }
 
  public toText(level: number) {
    const type = this.rowType;
 
    if (this.options.withHeader === true) {
      return "Table with header of " + type.toText(level + 1);
    } else {
      return "Table of " + type.toText(level + 1);
    }
  }
 
  public isGeneric() {
    return this.rowType.isGeneric();
  }
 
  public containsVoid() {
    return this.rowType.containsVoid();
  }
 
  public toCDS() {
    return "abap.TODO_TABLE";
  }
}