这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 44 additions & 7 deletions console/src/components/Services/Data/Common/utils.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,44 @@
import { aggCategory, pgCategoryCode } from './PgInfo';

const splitDbRow = row => {
/* Splits comma seperated type names
* Splits comma seperated type display names
* Splits comma seperated type descriptions
* */
return {
typInfo: row[0].split(','),
typDisplayName: row[1].split(','),
typDescription: row[2].split(':'),
};
};

/*
* Returns a map of all data types and their source info
* Example:
* For text: text text "variable-length string, no limit specified"
* */

const getAllDataTypeMap = allDataTypes => {
const dTIndex = {};
allDataTypes.forEach(dataTypes => {
const { typInfo, typDisplayName, typDescription } = splitDbRow(dataTypes);

typInfo.forEach((currentType, typIndex) => {
dTIndex[currentType] = [
typInfo[typIndex],
typDisplayName[typIndex],
typDescription[typIndex],
];
});
});
return dTIndex;
};

const getDataTypeInfo = (row, categoryInfo, colId) => {
const columnTypeValueMap = {};
// Splits comma seperated type names
const typInfo = row[0].split(',');
// Splits comma seperated type display names
const typDisplayName = row[1].split(',');
// Splits comma seperated type descriptions
const typDescription = row[2].split(':');

const { typInfo, typDisplayName, typDescription } = splitDbRow(row);

// Create option object for every valid type
const currTypeObj = typInfo.map((t, i) => {
const optObj = {
Expand Down Expand Up @@ -100,4 +131,10 @@ const getDefaultValue = column => {
return ('default' in column && column.default.value) || '';
};

export { getDataOptions, getPlaceholder, getDefaultValue, getDataTypeInfo };
export {
getDataOptions,
getPlaceholder,
getDefaultValue,
getDataTypeInfo,
getAllDataTypeMap,
};
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
} from '../TableModify/ModifyActions';
import { fetchColumnComment } from '../DataActions';
import { ordinalColSort } from '../utils';
import { defaultDataTypeToCast } from '../constants';

import styles from './ModifyTable.scss';

Expand All @@ -22,6 +23,7 @@ const ColumnEditorList = ({
columnComments,
//
validTypeCasts,
dataTypeIndexMap,
}) => {
const tableName = tableSchema.table_name;

Expand Down Expand Up @@ -125,10 +127,21 @@ const ColumnEditorList = ({
);
};

const getValidTypeCasts = udtName => {
const lowerUdtName = udtName.toLowerCase();
if (lowerUdtName in validTypeCasts) {
return validTypeCasts[lowerUdtName];
}
return [
...dataTypeIndexMap[lowerUdtName],
...dataTypeIndexMap[defaultDataTypeToCast],
];
};

const colEditorExpanded = () => {
return (
<ColumnEditor
alterTypeOptions={validTypeCasts[col.udt_name]}
alterTypeOptions={getValidTypeCasts(col.udt_name)}
column={col}
onSubmit={onSubmit}
onDelete={safeOnDelete}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import PropTypes from 'prop-types';
import React from 'react';
import TableHeader from '../TableCommon/TableHeader';

import { getAllDataTypeMap } from '../Common/utils';

import {
deleteTableSql,
untrackTableSql,
Expand Down Expand Up @@ -56,6 +58,8 @@ class ModifyTable extends React.Component {
uniqueKeyModify,
} = this.props;

const dataTypeIndexMap = getAllDataTypeMap(dataTypes);

const tableSchema = allSchemas.find(t => t.table_name === tableName);

const untrackBtn = (
Expand Down Expand Up @@ -120,6 +124,7 @@ class ModifyTable extends React.Component {
<h4 className={styles.subheading_text}>Columns</h4>
<ColumnEditorList
validTypeCasts={validTypeCasts}
dataTypeIndexMap={dataTypeIndexMap}
tableSchema={tableSchema}
columnEdit={columnEdit}
columnComments={columnComments}
Expand Down
1 change: 1 addition & 0 deletions console/src/components/Services/Data/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ export const Reals = ['float4', 'float8', 'numeric'];

export const Numerics = [...Integers, ...Reals];

export const defaultDataTypeToCast = 'text';