Merge pull request #3892 from mahomedalid/feature/3771_string_length

Adding support for parenthesis in the er diagram attribute types.
This commit is contained in:
Knut Sveidqvist
2022-12-16 12:58:30 +01:00
committed by GitHub
6 changed files with 37 additions and 7 deletions

View File

@@ -182,6 +182,20 @@ describe('Entity Relationship Diagram', () => {
cy.get('svg'); cy.get('svg');
}); });
it('should render entities with length in attributes type', () => {
renderGraph(
`
erDiagram
CLUSTER {
varchar(99) name
string(255) description
}
`,
{ logLevel: 1 }
);
cy.get('svg');
});
it('should render entities and attributes with big and small entity names', () => { it('should render entities and attributes with big and small entity names', () => {
renderGraph( renderGraph(
` `

View File

@@ -40,7 +40,7 @@ erDiagram
string city string city
string region string region
string state string state
string postal_code string(5) postal_code
string country string country
} }

View File

@@ -230,7 +230,7 @@ erDiagram
} }
``` ```
The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens or underscores. Other than that, there are no restrictions, and there is no implicit set of valid data types. The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens, underscores, parentheses and square brackets. Other than that, there are no restrictions, and there is no implicit set of valid data types.
#### Attribute Keys and Comments #### Attribute Keys and Comments
@@ -244,11 +244,12 @@ erDiagram
string registrationNumber string registrationNumber
string make string make
string model string model
string[] parts
} }
PERSON ||--o{ NAMED-DRIVER : is PERSON ||--o{ NAMED-DRIVER : is
PERSON { PERSON {
string driversLicense PK "The license #" string driversLicense PK "The license #"
string firstName string(99) firstName "Only 99 characters are allowed"
string lastName string lastName
int age int age
} }
@@ -263,11 +264,12 @@ erDiagram
string registrationNumber string registrationNumber
string make string make
string model string model
string[] parts
} }
PERSON ||--o{ NAMED-DRIVER : is PERSON ||--o{ NAMED-DRIVER : is
PERSON { PERSON {
string driversLicense PK "The license #" string driversLicense PK "The license #"
string firstName string(99) firstName "Only 99 characters are allowed"
string lastName string lastName
int age int age
} }

View File

@@ -31,7 +31,7 @@ accDescr\s*"{"\s* { this.begin("acc_descr_multili
<block>\s+ /* skip whitespace in block */ <block>\s+ /* skip whitespace in block */
<block>\b((?:PK)|(?:FK))\b return 'ATTRIBUTE_KEY' <block>\b((?:PK)|(?:FK))\b return 'ATTRIBUTE_KEY'
<block>(.*?)[~](.*?)*[~] return 'ATTRIBUTE_WORD'; <block>(.*?)[~](.*?)*[~] return 'ATTRIBUTE_WORD';
<block>[A-Za-z][A-Za-z0-9\-_\[\]]* return 'ATTRIBUTE_WORD' <block>[A-Za-z][A-Za-z0-9\-_\[\]\(\)]* return 'ATTRIBUTE_WORD'
<block>\"[^"]*\" return 'COMMENT'; <block>\"[^"]*\" return 'COMMENT';
<block>[\n]+ /* nothing */ <block>[\n]+ /* nothing */
<block>"}" { this.popState(); return 'BLOCK_STOP'; } <block>"}" { this.popState(); return 'BLOCK_STOP'; }

View File

@@ -214,6 +214,19 @@ describe('when parsing ER diagram it...', function () {
expect(entities[entity].attributes.length).toBe(2); expect(entities[entity].attributes.length).toBe(2);
}); });
it('should allow an entity with attribute that is a limited length string', function () {
const entity = 'BOOK';
const attribute1 = 'character(10) isbn FK';
const attribute2 = 'varchar(5) postal_code "Five digits"';
erDiagram.parser.parse(`erDiagram\n${entity} {\n${attribute1}\n${attribute2}\n}`);
const entities = erDb.getEntities();
expect(Object.keys(entities).length).toBe(1);
expect(entities[entity].attributes.length).toBe(2);
expect(entities[entity].attributes[0].attributeType).toBe('character(10)');
expect(entities[entity].attributes[1].attributeType).toBe('varchar(5)');
});
it('should allow an entity with multiple attributes to be defined', function () { it('should allow an entity with multiple attributes to be defined', function () {
const entity = 'BOOK'; const entity = 'BOOK';
const attribute1 = 'string title'; const attribute1 = 'string title';

View File

@@ -160,7 +160,7 @@ erDiagram
} }
``` ```
The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens or underscores. Other than that, there are no restrictions, and there is no implicit set of valid data types. The `type` and `name` values must begin with an alphabetic character and may contain digits, hyphens, underscores, parentheses and square brackets. Other than that, there are no restrictions, and there is no implicit set of valid data types.
#### Attribute Keys and Comments #### Attribute Keys and Comments
@@ -174,11 +174,12 @@ erDiagram
string registrationNumber string registrationNumber
string make string make
string model string model
string[] parts
} }
PERSON ||--o{ NAMED-DRIVER : is PERSON ||--o{ NAMED-DRIVER : is
PERSON { PERSON {
string driversLicense PK "The license #" string driversLicense PK "The license #"
string firstName string(99) firstName "Only 99 characters are allowed"
string lastName string lastName
int age int age
} }