A code generator from SQL to any language
CREATE TABLE MyTable (
name TEXT COMMENT 'Field comment[S]',
age BOOL NOT NULL DEFAULT 0 COMMENT 'Field comment[F:false]'
) COMMENT = 'Table comment[N:My Table|My tables]';/** $[table.comment] */
export class $[Table.norm] {
$[field.each]
/** $[field.comment] */
public $[field.norm]: $[field.if(boolean)]boolean$[field.else]string$[field.end];
$[field.end]
}/** Table comment */
export class MyTable {
/** Field comment */
public name: string;
/** Field comment */
public age: boolean;
}- example:
'Any comment[N:name|names]'
[D]Default field, with this flag, the field must not be filled by the user[E:Apple|Orange|Banana]Informs enum beautiful names[F:false]describe the field or table[G:a]or[G:o]name gender[H:table name]Define inheritance[I:64x64|user|default.png]Treats that field as image url, options sets the image dimension, base directory and default image name[K:package.io|package/io/]define a package name and its directory[L:form-control|extra style]field style and extra style[M:999-9999]set field as masked by option[N:name|names]set the beautiful name and/or plural name[P]Treats that field as password field[R]mark enum field as a radio[S]as searchable descriptor or[S:S]as searchable only[T]mark field to be filled as textarea element[U:unixname|unixnames]set the unix name and/or plural unix name[ID:identifier]set some identifier to field or table
- example:
class $[Table..norm] {} - output:
class MyParentTable {}
commands:
-
$[table]database table name$[table.unix]Table name in unix format$[table.unix.replace(s$)]Remove plural from table name after convert to unix format$[table.unix.plural]database table name on plural$[table.norm]Table name normalized and despluralized$[table.norm.default]Table name normalized without despluralize$[table.name]Beautiful name of table$[table.name.plural]Beautiful name of table on plural$[table.style]css style of table$[table.style.extra]css extra style of table$[table.info]Describe the table functionality$[table.comment]Comment of table or each comment line wrapped when in loop$[table.gender]table gender$[table.chars]all word first characters of table name$[table.letter]first char of table name$[table.package]defined package for table$[table.inherited]defined package for table$[table.path]defined path for class file$[table.order]left zero padded table order$[table.if(attribute)]table condition, attributes:- comment
- depends: check if current table depends on its parent
- index
- inherited
- package
- path
- pluralizable
- unique
- unpluralizable
$[table.exists(type|attribute)]check if the table contains a field with matching type or attribute example:$[table.~exists(comment)]check if table doesn't have a commentary$[table..match(regex)]test if regex match parent table name$[table.finds(column_name)]check if the table contains a field called column_name example:$[table.finds(.*_at)]check if table has field name as date$[table.each]for each all tables example: table.each(index), for each all index example: table.each(unique), for each unique index including primary example: table.each(primary), for each primary key index example: table.each(constraint), for each all constraint including primary and unique index example: table.each(foreign), for each all foreign key example: table.each(comment), for each comment line wrapped$[table.end]end table exists condition or each loop
-
$[index]index field name$[index.name]index name$[index.each(type|attribute)]for each field of index$[index.if(attribute)]few_fields, fulltext
-
$[unique]unique field name$[unique.name]unique index name$[unique.each(type|attribute)]for each field of unique index
-
$[primarykey]primary key field name$[primarykey.name]primary key index name
-
$[primary.each(type|attribute)]for each field of primary key index -
$[constraint]first constraint field name$[constraint.name]constraint name$[constraint.each(type|attribute)]for each field of constraint
-
$[foreign]first foreign field name$[foreign.name]foreign key name$[foreign.each(type|attribute)]for each field of foreign key
-
$[inherited]inherited table -
$[primary]primary key field have all field properties, when primary key have only one field -
$[descriptor]main field of table, have all field properties -
$[comment.each]each line of comment -
$[comment]single line of comment break by 72 chars -
$[description.each]each line of comment with ' escaped -
$[description]single line of comment with ' escaped break by 72 chars -
$[reference]referenced table by field or constraint, have all table commands$[reference.match(regex)]test if regex match referenced table name$[reference.finds(column_name)]check if the referenced table contains a field called column_name example:$[reference.finds(.*_at)]check if referenced table has field name as date pattern$[reference.reverse_each]reverse for each field process content$[reference.each(type|attribute&all)]for each field of referenced constraint table
-
$[field]name of table field$[field.replace(_url,_file)]replace field name from ie. image_url to image_file$[field.unix]name of field in unix format$[field.norm]name of field normalized$[field.norm.singular]Table name normalized on singular$[field.name]Beautiful name of table field$[field.info]Describe the field functionality$[field.comment]Comment of the field or each comment line wrapped when in loop$[field.content]fill with each field template generated$[field.mask]mask informed on model for the field$[field.style]css style of field$[field.gender]field gender$[field.chars]all word first characters of field name$[field.letter]first char of field name$[field.array.count]number of common fields, i.e, same name with different number$[field.array.index]current index of common field, start from 0$[field.array.number]current number of common field, start from 1$[field.size]Size of the field in bytes$[field.length]Length of the string field$[field.each]for each table field or each field of source on legacy- legacy example:
$[field.each(primary)]for each primary key fields - example:
$[field.each(reference & required)] - legacy example:
$[field.each(comment)],for each comment line wrapped - example:
$[field.each(search)] - legacy example:
$[field.each(option)],for each option of field(enum items) - example:
$[field.each(all)]for each all table field
- legacy example:
$[field.end]end each loop$[field.if(type|attribute&~(type|~attribute))]test if field is type or has attributes, example:$[field.if(reference)]attributes:- array
- bigint
- blob
- boolean
- comment
- currency
- date
- datetime
- default
- depends: check if field references its parent table
- description
- descriptor
- double
- enum
- feminine
- few_fields
- first
- float
- image
- info
- integer
- many
- masculine
- masked
- non_first
- non_null
- not_null
- null
- optional
- pluralizable
- primary
- radio
- reference
- repeated
- required
- searchable
- self_reference
- single
- string
- text
- time
- unique
- unpluralizable
- unsigned
$[field.else]when if condition is false (must be the last before field.end)$[field.else.if(type|attribute)]when if condition is false and make a test if field type or has attributes$[field.end]end if$[field.match(regex)]test if regex match field SQL name$[field.end]end match$[field.contains(text)]test if field SQL name contains "text"$[field.end]end contains
-
$[option]or$[field.option]enum item value$[option.unix]enum item value as unix name$[option.norm]enum item value normalized$[option.low]first enum item index, start from 0$[option.high]last enum item index, start from 0$[option.index]current index of option, start from 0$[option.number]current number of option, start from 1$[option.count]count of enum items
-
$[image]or$[field.image]first image field of table[I]$[image.width]recommended image width$[image.height]recommended image height$[image.folder]image folder to upload$[image.default]default image url
- example: for table name
category,$[Table.name]outputs:Category - example: for table name
Category,$[table.name]outputs:category - example: for table name
category,$[TABLE.name]outputs:CATEGORY - example: for table name
CaTeGoRy,$[tAble.name]outputs:CaTeGoRy
- (
-d|--despluralize)"match1|match2/slice_end/[replacement[/min_length]];ms|ls/1/s/4": set the despluralization database rules - (
-f|--file|-i|--input)input.sql: set the input sql file - (
-h|--help): show this help - (
-l|--legacy): use legacy loops instead of as filter - (
-o|--output)storage/generated: set the output directory - (
-p|--project)cogen.properties: read a project from file - (
-s|--silent): run without print anything - (
-t|--template)scripts/template/: set the template input directory - (
-u|--uppercase)"|USA|W3C|": set the uppercase database names - (
-w|--write)cogen.properties: save configuration to file when finishes