Skip to content

Commit a02c0d2

Browse files
author
Steve Ives
committed
Added support for cusatomizing field data types via long description tokens.
1 parent ac21833 commit a02c0d2

File tree

5 files changed

+244
-0
lines changed

5 files changed

+244
-0
lines changed

CodeGenEngine/ExpressionEvaluators/ExpressionEvaluatorFieldLoop.dbl

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ namespace CodeGen.Engine
9393
fieldLoopExpressionEvaluators.Add("COERCE_BOOLEAN", evaluateFieldCoerceBoolean)
9494
fieldLoopExpressionEvaluators.Add("COERCEBOOLEAN", evaluateFieldCoerceBoolean)
9595
fieldLoopExpressionEvaluators.Add("COMBOBOX", evaluateFieldComboBox)
96+
fieldLoopExpressionEvaluators.Add("CUSTOM_DBL_TYPE", evaluateFieldCustomDblType)
97+
fieldLoopExpressionEvaluators.Add("CUSTOM_SQL_TYPE", evaluateFieldCustomSqlType)
98+
fieldLoopExpressionEvaluators.Add("CUSTOM_CONVERT_FUNCTION", evaluateFieldCustomConvertFunction)
99+
fieldLoopExpressionEvaluators.Add("CUSTOM_STRING_FUNCTION", evaluateFieldCustomStringFunction)
96100
fieldLoopExpressionEvaluators.Add("DATE", evaluateFieldDate)
97101
fieldLoopExpressionEvaluators.Add("DATE_JULIAN", evaluateFieldDateJulian)
98102
fieldLoopExpressionEvaluators.Add("DATE_NOT_JULIAN", evaluateFieldDateNotJulian)
@@ -658,6 +662,114 @@ namespace CodeGen.Engine
658662
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
659663
endmethod
660664

665+
private static method evaluateFieldCustomDblType, boolean
666+
tkn, @Token
667+
template, @FileNode
668+
loops, @IEnumerable<LoopNode>
669+
endparams
670+
proc
671+
lambda doEvaluate(str, field, index)
672+
begin
673+
data stringToTest, string
674+
if (field.LongDescription.Contains("CUSTOM_DBL_TYPE=")) then
675+
stringToTest = field.LongDescription
676+
else if (field.UserText.Contains("CUSTOM_DBL_TYPE="))
677+
stringToTest = field.UserText
678+
if (!String.IsNullOrWhiteSpace(stringToTest))
679+
begin
680+
data startPos = stringToTest.IndexOf("CUSTOM_DBL_TYPE=")
681+
data semiPos, int, -1
682+
if (startPos!=-1)
683+
semiPos = stringToTest.IndexOf(";",startPos)
684+
if ((startPos!=-1) && (semiPos!=-1) && (semiPos>(startPos+16)))
685+
mreturn true
686+
end
687+
mreturn false
688+
end
689+
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
690+
endmethod
691+
692+
private static method evaluateFieldCustomSqlType, boolean
693+
tkn, @Token
694+
template, @FileNode
695+
loops, @IEnumerable<LoopNode>
696+
endparams
697+
proc
698+
lambda doEvaluate(str, field, index)
699+
begin
700+
data stringToTest, string
701+
if (field.LongDescription.Contains("CUSTOM_SQL_TYPE=")) then
702+
stringToTest = field.LongDescription
703+
else if (field.UserText.Contains("CUSTOM_SQL_TYPE="))
704+
stringToTest = field.UserText
705+
if (!String.IsNullOrWhiteSpace(stringToTest))
706+
begin
707+
data startPos = stringToTest.IndexOf("CUSTOM_SQL_TYPE=")
708+
data semiPos, int, -1
709+
if (startPos!=-1)
710+
semiPos = stringToTest.IndexOf(";",startPos)
711+
if ((startPos!=-1) && (semiPos!=-1) && (semiPos>(startPos+16)))
712+
mreturn true
713+
end
714+
mreturn false
715+
end
716+
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
717+
endmethod
718+
719+
private static method evaluateFieldCustomConvertFunction, boolean
720+
tkn, @Token
721+
template, @FileNode
722+
loops, @IEnumerable<LoopNode>
723+
endparams
724+
proc
725+
lambda doEvaluate(str, field, index)
726+
begin
727+
data stringToTest, string
728+
if (field.LongDescription.Contains("CUSTOM_CONVERT_FUNCTION=")) then
729+
stringToTest = field.LongDescription
730+
else if (field.UserText.Contains("CUSTOM_CONVERT_FUNCTION="))
731+
stringToTest = field.UserText
732+
if (!String.IsNullOrWhiteSpace(stringToTest))
733+
begin
734+
data startPos = stringToTest.IndexOf("CUSTOM_CONVERT_FUNCTION=")
735+
data semiPos, int, -1
736+
if (startPos!=-1)
737+
semiPos = stringToTest.IndexOf(";",startPos)
738+
if ((startPos!=-1) && (semiPos!=-1) && (semiPos>(startPos+24)))
739+
mreturn true
740+
end
741+
mreturn false
742+
end
743+
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
744+
endmethod
745+
746+
private static method evaluateFieldCustomStringFunction, boolean
747+
tkn, @Token
748+
template, @FileNode
749+
loops, @IEnumerable<LoopNode>
750+
endparams
751+
proc
752+
lambda doEvaluate(str, field, index)
753+
begin
754+
data stringToTest, string
755+
if (field.LongDescription.Contains("CUSTOM_STRING_FUNCTION=")) then
756+
stringToTest = field.LongDescription
757+
else if (field.UserText.Contains("CUSTOM_STRING_FUNCTION="))
758+
stringToTest = field.UserText
759+
if (!String.IsNullOrWhiteSpace(stringToTest))
760+
begin
761+
data startPos = stringToTest.IndexOf("CUSTOM_STRING_FUNCTION=")
762+
data semiPos, int, -1
763+
if (startPos!=-1)
764+
semiPos = stringToTest.IndexOf(";",startPos)
765+
if ((startPos!=-1) && (semiPos!=-1) && (semiPos>(startPos+23)))
766+
mreturn true
767+
end
768+
mreturn false
769+
end
770+
mreturn EvaluateFieldLoopExpression(tkn, template, loops, doEvaluate)
771+
endmethod
772+
661773
private static method evaluateFieldDate, boolean
662774
tkn, @Token
663775
template, @FileNode

CodeGenEngine/TokenExpanders/TokenExpanderFieldLoop.dbl

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ namespace CodeGen.Engine
7070
fieldLoopTokenExpanders.Add("FIELD_COL", expandFieldColumn)
7171
fieldLoopTokenExpanders.Add("FIELD_CSDEFAULT", expandFieldCsDefault)
7272
fieldLoopTokenExpanders.Add("FIELD_CSTYPE", expandFieldCsType)
73+
fieldLoopTokenExpanders.Add("FIELD_CUSTOM_DBL_TYPE", expandFieldCustomDblType)
74+
fieldLoopTokenExpanders.Add("FIELD_CUSTOM_SQL_TYPE", expandFieldCustomSqlType)
75+
fieldLoopTokenExpanders.Add("FIELD_CUSTOM_CONVERT_FUNCTION", expandFieldCustomConvertFunction)
76+
fieldLoopTokenExpanders.Add("FIELD_CUSTOM_STRING_FUNCTION", expandFieldCustomStringFunction)
7377
fieldLoopTokenExpanders.Add("FIELD_CSCONVERT", expandFieldCsConvert)
7478
fieldLoopTokenExpanders.Add("FIELD_DEFAULT", expandFieldDefault)
7579
fieldLoopTokenExpanders.Add("FIELD_DESC", expandFieldDescription)
@@ -328,6 +332,126 @@ namespace CodeGen.Engine
328332
mreturn ExpandFieldLoopToken(tkn, template, loops, doExpand)
329333
endmethod
330334

335+
private static method expandFieldCustomDblType, string
336+
tkn, @Token
337+
template, @FileNode
338+
loops, @IEnumerable<LoopNode>
339+
endparams
340+
proc
341+
lambda doExpand(str, field)
342+
begin
343+
data stringToTest, string
344+
345+
if (field.LongDescription.Contains("CUSTOM_DBL_TYPE=")) then
346+
stringToTest = field.LongDescription
347+
else if (field.UserText.Contains("CUSTOM_DBL_TYPE="))
348+
stringToTest = field.UserText
349+
350+
if (!String.IsNullOrWhiteSpace(stringToTest))
351+
begin
352+
data startPos = stringToTest.IndexOf("CUSTOM_DBL_TYPE=")
353+
data semiPos, int, -1
354+
if (startPos!=-1)
355+
semiPos = stringToTest.IndexOf(";",startPos)
356+
if ((startPos!=-1) && (semiPos!=-1) && (semiPos>(startPos+16)))
357+
mreturn stringToTest.Substring(startPos+16,semiPos-startPos-16)
358+
end
359+
360+
mreturn expandFieldSpec(tkn, template, loops)
361+
end
362+
mreturn ExpandFieldLoopToken(tkn, template, loops, doExpand)
363+
endmethod
364+
365+
private static method expandFieldCustomSqlType, string
366+
tkn, @Token
367+
template, @FileNode
368+
loops, @IEnumerable<LoopNode>
369+
endparams
370+
proc
371+
lambda doExpand(str, field)
372+
begin
373+
data stringToTest, string
374+
375+
if (field.LongDescription.Contains("CUSTOM_SQL_TYPE=")) then
376+
stringToTest = field.LongDescription
377+
else if (field.UserText.Contains("CUSTOM_SQL_TYPE="))
378+
stringToTest = field.UserText
379+
380+
if (!String.IsNullOrWhiteSpace(stringToTest))
381+
begin
382+
data startPos = stringToTest.IndexOf("CUSTOM_SQL_TYPE=")
383+
data semiPos, int, -1
384+
if (startPos!=-1)
385+
semiPos = stringToTest.IndexOf(";",startPos)
386+
if ((startPos!=-1) && (semiPos!=-1) && (semiPos>(startPos+16)))
387+
mreturn stringToTest.Substring(startPos+16,semiPos-startPos-16)
388+
end
389+
390+
mreturn expandFieldSqlType(tkn, template, loops)
391+
end
392+
mreturn ExpandFieldLoopToken(tkn, template, loops, doExpand)
393+
endmethod
394+
395+
private static method expandFieldCustomConvertFunction, string
396+
tkn, @Token
397+
template, @FileNode
398+
loops, @IEnumerable<LoopNode>
399+
endparams
400+
proc
401+
lambda doExpand(str, field)
402+
begin
403+
data stringToTest, string
404+
405+
if (field.LongDescription.Contains("CUSTOM_CONVERT_FUNCTION=")) then
406+
stringToTest = field.LongDescription
407+
else if (field.UserText.Contains("CUSTOM_CONVERT_FUNCTION="))
408+
stringToTest = field.UserText
409+
410+
if (!String.IsNullOrWhiteSpace(stringToTest))
411+
begin
412+
data startPos = stringToTest.IndexOf("CUSTOM_CONVERT_FUNCTION=")
413+
data semiPos, int, -1
414+
if (startPos!=-1)
415+
semiPos = stringToTest.IndexOf(";",startPos)
416+
if ((startPos!=-1) && (semiPos!=-1) && (semiPos>(startPos+24)))
417+
mreturn stringToTest.Substring(startPos+24,semiPos-startPos-24)
418+
end
419+
420+
mreturn ""
421+
end
422+
mreturn ExpandFieldLoopToken(tkn, template, loops, doExpand)
423+
endmethod
424+
425+
private static method expandFieldCustomStringFunction, string
426+
tkn, @Token
427+
template, @FileNode
428+
loops, @IEnumerable<LoopNode>
429+
endparams
430+
proc
431+
lambda doExpand(str, field)
432+
begin
433+
data stringToTest, string
434+
435+
if (field.LongDescription.Contains("CUSTOM_STRING_FUNCTION=")) then
436+
stringToTest = field.LongDescription
437+
else if (field.UserText.Contains("CUSTOM_STRING_FUNCTION="))
438+
stringToTest = field.UserText
439+
440+
if (!String.IsNullOrWhiteSpace(stringToTest))
441+
begin
442+
data startPos = stringToTest.IndexOf("CUSTOM_STRING_FUNCTION=")
443+
data semiPos, int, -1
444+
if (startPos!=-1)
445+
semiPos = stringToTest.IndexOf(";",startPos)
446+
if ((startPos!=-1) && (semiPos!=-1) && (semiPos>(startPos+23)))
447+
mreturn stringToTest.Substring(startPos+23,semiPos-startPos-23)
448+
end
449+
450+
mreturn ""
451+
end
452+
mreturn ExpandFieldLoopToken(tkn, template, loops, doExpand)
453+
endmethod
454+
331455
private static method expandFieldCsConvert, string
332456
tkn, @Token
333457
template, @FileNode

CodeGenEngine/Tokenizer.dbl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,10 @@ namespace CodeGen.Engine
291291
& { new TokenMeta() {Name = "FIELD_CSCONVERT", TypeOfToken = TokenType.FieldLoop, IsPaired = false, Validity = TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop | TokenValidity.RelationSegmentLoop, RequiresRepository = true} },
292292
& { new TokenMeta() {Name = "FIELD_CSDEFAULT", TypeOfToken = TokenType.FieldLoop, IsPaired = false, Validity = TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop | TokenValidity.RelationSegmentLoop, RequiresRepository = true} },
293293
& { new TokenMeta() {Name = "FIELD_CSTYPE", TypeOfToken = TokenType.FieldLoop, IsPaired = false, Validity = TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop | TokenValidity.RelationSegmentLoop, RequiresRepository = true} },
294+
& { new TokenMeta() {Name = "FIELD_CUSTOM_DBL_TYPE", TypeOfToken = TokenType.FieldLoop, IsPaired = false, Validity = TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop | TokenValidity.RelationSegmentLoop, RequiresRepository = true} },
295+
& { new TokenMeta() {Name = "FIELD_CUSTOM_SQL_TYPE", TypeOfToken = TokenType.FieldLoop, IsPaired = false, Validity = TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop | TokenValidity.RelationSegmentLoop, RequiresRepository = true} },
296+
& { new TokenMeta() {Name = "FIELD_CUSTOM_CONVERT_FUNCTION", TypeOfToken = TokenType.FieldLoop, IsPaired = false, Validity = TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop | TokenValidity.RelationSegmentLoop, RequiresRepository = true} },
297+
& { new TokenMeta() {Name = "FIELD_CUSTOM_STRING_FUNCTION", TypeOfToken = TokenType.FieldLoop, IsPaired = false, Validity = TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop | TokenValidity.RelationSegmentLoop, RequiresRepository = true} },
294298
& { new TokenMeta() {Name = "FIELD_DEFAULT", TypeOfToken = TokenType.FieldLoop, IsPaired = false, Validity = TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop | TokenValidity.RelationSegmentLoop, RequiresRepository = true} },
295299
& { new TokenMeta() {Name = "FIELD_DESC", TypeOfToken = TokenType.FieldLoop, IsPaired = false, Validity = TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop | TokenValidity.RelationSegmentLoop, RequiresRepository = true} },
296300
& { new TokenMeta() {Name = "FIELD_DIMENSION1_INDEX", TypeOfToken = TokenType.FieldLoop, IsPaired = false, Validity = TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop | TokenValidity.RelationSegmentLoop, RequiresRepository = true} },
@@ -711,6 +715,10 @@ namespace CodeGen.Engine
711715
expressions.Add("COUNTER_2", TokenValidity.Anywhere)
712716
expressions.Add("CUSTOM_", TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop )
713717
expressions.Add("CUSTOM_NOT_", TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop )
718+
expressions.Add("CUSTOM_DBL_TYPE", TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop )
719+
expressions.Add("CUSTOM_SQL_TYPE", TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop )
720+
expressions.Add("CUSTOM_CONVERT_FUNCTION", TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop )
721+
expressions.Add("CUSTOM_STRING_FUNCTION", TokenValidity.FieldLoop | TokenValidity.KeySegmentLoop )
714722
expressions.Add("DATABASE_MYSQL", TokenValidity.Anywhere)
715723
expressions.Add("DATABASE_POSTGRESQL", TokenValidity.Anywhere)
716724
expressions.Add("DATABASE_SQLSERVER", TokenValidity.Anywhere)

Documentation/CodeGen.chm

2.9 KB
Binary file not shown.

Documentation/CodeGen.hsm

47.3 KB
Binary file not shown.

0 commit comments

Comments
 (0)