Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Comment: | added aDocVariant.Value(aName) and aDocVariant._(aName) pseudo methods, to be used with late-binding of method names which can't be written inline - e.g. {data:{"1000":"D1"}} |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
47805bc15e118637de996933a4ca1e70 |
User & Date: | User 2014-07-04 10:31:06 |
2014-07-04
| ||
11:43 | for PostgreSQL, SynDB will create TEXT column instead of VARCHAR(%) http://www.postgresql.org/docs/devel/static/datatype-character.html check-in: a540a5fae8 user: User tags: trunk | |
10:31 | added aDocVariant.Value(aName) and aDocVariant._(aName) pseudo methods, to be used with late-binding of method names which can't be written inline - e.g. {data:{"1000":"D1"}} check-in: 47805bc15e user: User tags: trunk | |
09:47 | added function AnyTextFileToRawUTF8() check-in: 1968310b19 user: User tags: trunk | |
Changes to SynCommons.pas.
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
.....
28001
28002
28003
28004
28005
28006
28007
28008
28009
28010
28011
28012
28013
28014
28015
28016
28017
28018
28019
28020
28021
28022
28023
28024
28025
28026
28027
28028
28029
28030
28031
28032
28033
28034
28035
28036
28037
28038
28039
28040
28041
28042
28043
28044
28045
28046
28047
28048
28049
28050
28051
28052
28053
28054
|
// instances of this kind of variants // - it also supports a small set of pseudo-properties or pseudo-methods: // ! aVariant._Count = DocVariantData(aVariant).Count // ! aVariant._Kind = ord(DocVariantData(aVariant).Kind) // ! aVariant._JSON = DocVariantData(aVariant).JSON // ! aVariant._(i) = DocVariantData(aVariant).Value[i] // ! aVariant.Value(i) = DocVariantData(aVariant).Value[i] // ! aVariant.Name(i) = DocVariantData(aVariant).Name[i] // ! aVariant.Add(aItem) = DocVariantData(aVariant).AddItem(aItem) // ! aVariant._ := aItem = DocVariantData(aVariant).AddItem(aItem) // ! aVariant.Add(aName,aValue) = DocVariantData(aVariant).AddValue(aName,aValue) // ! aVariant.Exists(aName) = DocVariantData(aVariant).GetValueIndex(aName)>=0 // ! aVariant.Delete(i) = DocVariantData(aVariant).Delete(i) // ! aVariant.Delete(aName) = DocVariantData(aVariant).Delete(aName) ................................................................................ end; function TDocVariant.DoFunction(var Dest: TVarData; const V: TVarData; const Name: string; const Arguments: TVarDataArray): boolean; var ndx: integer; Data: TDocVariantData absolute V; temp: RawUTF8; wasString: boolean; begin result := true; case length(Arguments) of 0:if SameText(Name,'Clear') then begin PDocVariantData(@V)^.VCount := 0; PDocVariantData(@V)^.VKind := dvUndefined; exit; end; 1:if SameText(Name,'Add') then begin Data.InternalAddValue('',variant(Arguments[0])); exit; end else if SameText(Name,'Delete') then begin VariantToUTF8(variant(Arguments[0]),temp,wasString); Data.Delete(Data.GetValueIndex(temp)); exit; end else if SameText(Name,'Exists') then begin VariantToUTF8(variant(Arguments[0]),temp,wasString); variant(Dest) := Data.GetValueIndex(temp)>=0; exit; end else if SameText(Name,'NameIndex') then begin VariantToUTF8(variant(Arguments[0]),temp,wasString); variant(Dest) := Data.GetValueIndex(temp); exit; end else if VariantToInteger(variant(Arguments[0]),ndx) then if (Name='_') or SameText(Name,'Value') then begin Data.RetrieveValueOrRaiseException(ndx,variant(Dest),true); exit; end else if SameText(Name,'Name') then begin Data.RetrieveNameOrRaiseException(ndx,temp); RawUTF8ToVariant(temp,variant(Dest)); exit; end; 2:if SameText(Name,'Add') then begin VariantToUTF8(variant(Arguments[0]),temp,wasString); Data.InternalAddValue(temp,variant(Arguments[1])); exit; end; end; result := false; end; |
>
>
|
>
>
>
|
|
|
|
>
>
>
>
>
>
>
<
>
|
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
.....
28002
28003
28004
28005
28006
28007
28008
28009
28010
28011
28012
28013
28014
28015
28016
28017
28018
28019
28020
28021
28022
28023
28024
28025
28026
28027
28028
28029
28030
28031
28032
28033
28034
28035
28036
28037
28038
28039
28040
28041
28042
28043
28044
28045
28046
28047
28048
28049
28050
28051
28052
28053
28054
28055
28056
28057
28058
28059
28060
28061
28062
28063
28064
28065
28066
|
// instances of this kind of variants // - it also supports a small set of pseudo-properties or pseudo-methods: // ! aVariant._Count = DocVariantData(aVariant).Count // ! aVariant._Kind = ord(DocVariantData(aVariant).Kind) // ! aVariant._JSON = DocVariantData(aVariant).JSON // ! aVariant._(i) = DocVariantData(aVariant).Value[i] // ! aVariant.Value(i) = DocVariantData(aVariant).Value[i] // ! aVariant.Value(aName) = DocVariantData(aVariant).Value[aName] // ! aVariant.Name(i) = DocVariantData(aVariant).Name[i] // ! aVariant.Add(aItem) = DocVariantData(aVariant).AddItem(aItem) // ! aVariant._ := aItem = DocVariantData(aVariant).AddItem(aItem) // ! aVariant.Add(aName,aValue) = DocVariantData(aVariant).AddValue(aName,aValue) // ! aVariant.Exists(aName) = DocVariantData(aVariant).GetValueIndex(aName)>=0 // ! aVariant.Delete(i) = DocVariantData(aVariant).Delete(i) // ! aVariant.Delete(aName) = DocVariantData(aVariant).Delete(aName) ................................................................................ end; function TDocVariant.DoFunction(var Dest: TVarData; const V: TVarData; const Name: string; const Arguments: TVarDataArray): boolean; var ndx: integer; Data: TDocVariantData absolute V; temp: RawUTF8; procedure SetTempFromFirstArgument; var wasString: boolean; begin VariantToUTF8(variant(Arguments[0]),temp,wasString); end; begin result := true; case length(Arguments) of 0:if SameText(Name,'Clear') then begin PDocVariantData(@V)^.VCount := 0; PDocVariantData(@V)^.VKind := dvUndefined; exit; end; 1:if SameText(Name,'Add') then begin Data.InternalAddValue('',variant(Arguments[0])); exit; end else if SameText(Name,'Delete') then begin SetTempFromFirstArgument; Data.Delete(Data.GetValueIndex(temp)); exit; end else if SameText(Name,'Exists') then begin SetTempFromFirstArgument; variant(Dest) := Data.GetValueIndex(temp)>=0; exit; end else if SameText(Name,'NameIndex') then begin SetTempFromFirstArgument; variant(Dest) := Data.GetValueIndex(temp); exit; end else if VariantToInteger(variant(Arguments[0]),ndx) then begin if (Name='_') or SameText(Name,'Value') then begin Data.RetrieveValueOrRaiseException(ndx,variant(Dest),true); exit; end else if SameText(Name,'Name') then begin Data.RetrieveNameOrRaiseException(ndx,temp); RawUTF8ToVariant(temp,variant(Dest)); exit; end; end else if (Name='_') or SameText(Name,'Value') then begin SetTempFromFirstArgument; Data.RetrieveValueOrRaiseException(pointer(temp),length(temp), dvoNameCaseSensitive in Data.VOptions,variant(Dest),true); exit; end; 2:if SameText(Name,'Add') then begin SetTempFromFirstArgument; Data.InternalAddValue(temp,variant(Arguments[1])); exit; end; end; result := false; end; |
Changes to SynSelfTests.pas.
5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 |
DoChange(V2); Check(VariantSaveJSON(V1)=s); Check(Hash32(VariantSaveJSON(V2))=$92FEB37B); V2 := _copy(V1.Seasons); DoChange(V2); Check(VariantSaveJSON(V1)=s); Check(Hash32(VariantSaveJSON(V2))=$92FEB37B); end; {$endif LVCL} {$ifndef FPC} type TOrdTypeSet = set of TOrdType; |
> > > > > > > > > |
5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 |
DoChange(V2); Check(VariantSaveJSON(V1)=s); Check(Hash32(VariantSaveJSON(V2))=$92FEB37B); V2 := _copy(V1.Seasons); DoChange(V2); Check(VariantSaveJSON(V1)=s); Check(Hash32(VariantSaveJSON(V2))=$92FEB37B); V := _Json('{result:{data:{"1000":"D1", "1001":"D2"}}}'); Check(V.result='{"data":{"1000":"D1", "1001":"D2"}}'); Check(V.result.data.Exists('1000')); Check(V.result.data.Exists('1001')); Check(not V.result.data.Exists('1002')); Check(DocVariantData(V.result.data).Value['1000']='D1'); Check(V.result.data.Value(0)='D1'); Check(V.result.data.Value('1000')='D1'); Check(V.result.data.Value('1001')='D2'); end; {$endif LVCL} {$ifndef FPC} type TOrdTypeSet = set of TOrdType; |