- $result = $this->doQuery( "SELECT lower(asq.sequence_name),
- lower(atc.table_name),
- lower(atc.column_name)
- FROM all_sequences asq, all_tab_columns atc
- WHERE decode(
- atc.table_name,
- '{$this->tablePrefix}MWUSER',
- '{$this->tablePrefix}USER',
- atc.table_name
- ) || '_' ||
- atc.column_name || '_SEQ' = '{$this->tablePrefix}' || asq.sequence_name
- AND asq.sequence_owner = upper('{$this->getDBname()}')
- AND atc.owner = upper('{$this->getDBname()}')" );
+ $dbname = $this->currentDomain->getDatabase();
+ $prefix = $this->currentDomain->getTablePrefix();
+ // See https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm
+ $decodeArgs = [ 'atc.table_name' ]; // the switch
+ foreach ( $this->keywordTableMap as $reserved => $alternative ) {
+ $search = strtoupper( $prefix . $alternative ); // case
+ $replace = strtoupper( $prefix . $reserved ); // result
+ $decodeArgs[] = $this->addQuotes( $search );
+ $decodeArgs[] = $this->addQuotes( $replace );
+ }
+ $decodeArgs[] = [ 'atc.table_name' ]; // default
+ $decodeArgs = implode( ', ', $decodeArgs );
+
+ $result = $this->doQuery(
+ "SELECT lower(asq.sequence_name), lower(atc.table_name), lower(atc.column_name)
+ FROM all_sequences asq, all_tab_columns atc
+ WHERE decode({$decodeArgs}) || '_' ||
+ atc.column_name || '_SEQ' = '{$prefix}' || asq.sequence_name
+ AND asq.sequence_owner = upper('{$dbname}')
+ AND atc.owner = upper('{$dbname}')"
+ );