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

98.51% Statements 66/67
90.91% Branches 10/11
100% Functions 9/9
98.51% Lines 66/67

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 671x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 453x 453x 453x 453x 1x 1x 4x 4x 1x 1x 109x 109x 1x 1x 3x 3x 1x 1x 194x 194x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x   2x 2x 2x 2x 1x 1x 7x 7x 1x 1x 7x 7x 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 false;
  }
 
  public containsVoid() {
    return this.rowType.containsVoid();
  }
}