Ejemplo n.º 1
0
    def getNative(self):

        if isinstance(self.data.value_type, str):
            raise Exception(">>>>>")
        else:
            for field in self.data.value_type.getFields():
                name = field.Name().capitalize()
                func = self.data.gofile.addFunction("GetBy{}".format(name))

                if field not in self.data.getIndexes():

                    func.addArgs("{field} {type}".format(
                        field=field.Name(),
                        type=go_types.go_converter(field.getType())))
                    func.addResults("res []*{value_type}, count int".format(
                        value_type=self.data.getValueType()))

                    body = '''    for idx, value := range index_{first_index} <@
        if value.{name} == {field} <@
            res = append(res, &(index_{first_index}[idx]))
            count++
        @>
    @>
    return res, count'''.format(name=name,
                                field=field.Name(),
                                first_index=self.data.getIndexes()[0].Name())
                else:
                    func.addArgs("{field} {type}".format(
                        field=field.Name(),
                        type=go_types.go_converter(field.getType())))
                    func.addResults("res []*{value_type}, count int".format(
                        value_type=self.data.getValueType()))
                    value = "index_{field}[res_idx]".format(field=field.Name())
                    if field == self.data.getIndexes()[0]:
                        value = "&({value})".format(value=value)
                    body = '''    res_idx := sort.Search(Len(), func(i int) bool <@
        return index_{field}[i].{name} >= {field}
    @>)

    INTO_RES:
    if res_idx < Len() <@
        count++
        value := {value}
        if value.{name} == {field} <@
            res = append(res, value)
            res_idx++
            goto INTO_RES
        @>
    @>
    return res, count'''.format(field=field.Name(),
                                name=name,
                                data=self.data.Name(),
                                value=value)
                func.addBody(body)
Ejemplo n.º 2
0
 def addField(self, field, is_pointer=False):
     tf = "{name} {pointer}{type}".format(
         name=field.Name().capitalize(),
         type=field.field.getFullType()
         if field.isData() else go_types.go_converter(field.getType()),
         pointer="*" if is_pointer else "")
     self.fields.append(tf)
Ejemplo n.º 3
0
    def __init__( self, name, key, value, parent=None, public=True ):
        super( GoDictionaryData, self ).__init__( name, parent )
        self.key_type = key
        self.value_type = value
        self.value_type_name = go_types.go_converter(value) if isinstance(value, str) else value.Name()
        self.functions = [ AddDictionaryDataGoMethod,
                           GetDictionaryDataGoMethod,
                           RemoveDictionaryDataGoMethod,
                           LenDictionaryDataGoMethod,

        ]
Ejemplo n.º 4
0
    def funcGet(self):
        func = self.gofile.addFunction(
            "Get{data}Id".format(data=self.data.Name().capitalize()))

        func_args_list = []
        invoke_args_list = []

        for field in self.data.getFields():
            if not field.isAuto():
                func_args_list.append("{name} {type}".format(
                    name=field.Name(),
                    type=go_types.go_converter(field.getType())))
                invoke_args_list.append(field.Name())

        invoke_args = ", ".join(invoke_args_list)
        func_args = ", ".join(func_args_list)

        func.addArgs("foreign {foreign_type}, {func_args}".format(
            data=self.data.Name(),
            func_args=func_args,
            foreign_type=go_types.go_converter(self.foreign_type)))
        func.addResults("int, error")

        body = '''    {data}_id_list, count := index_{data}.GetById(foreign)
    if count == 0 <@
        res_interface, err := core.Invoke("{service}", "get_{data}_id", {invoke_args})
        if err != nil <@
            return 0, err
        @>
        localid := core.ToInt(res_interface)
        _, err = index_{data}.Add(foreign, localid)
        if err != nil <@
            return localid, err
        @>
        return localid, nil
    @>
    return {data}_id_list[0].Localid, nil'''.format(
            data=self.data.Name(),
            invoke_args=invoke_args,
            service=self.data.getService().Name())
        func.addBody(body)
Ejemplo n.º 5
0
    def getNative(self):
        if not len(self.data.getIndexes()) == 2:
            return
        if isinstance(self.data.value_type, str):
            raise Exception(">>>>>")
        else:
            self.data.gofile.addImport("core")

            field = self.data.getIndexes()[1]
            func = self.data.gofile.addFunction(self.Name())

            func.addArgs("{field} {type}".format(field=field.Name(),
                                                 type=go_types.go_converter(
                                                     field.getType())))
            func.addResults("int, error")

            body = '''    res_idx := sort.Search(Len(), func(i int) bool <@
        return index_{field}[i].{name} >= {field}
    @>)

    if res_idx < Len() && index_{field}[res_idx].{name} == {field}<@
        value := index_{field}[res_idx]
        return value.Id, nil
    @> else <@
        core.PublishWarning("{data_name}_cache: GetIdFromCache: call cross cache")
        newitem, err := {data_name}.ReadByUnique({field})
        if err != nil <@
            return 0, err
        @>
        index_id = append(index_id, newitem)
        index_{field} = append(index_{field}, &(index_id[len(index_id) - 1]))
        to_sort()
        return newitem.Id, nil
    @>'''.format(name=field.Name().capitalize(),
                 field=field.Name(),
                 data_name=self.data.value_type.Name())

            func.addBody(body)
Ejemplo n.º 6
0
Archivo: get.py Proyecto: zheld/geyser
    def getNative(self):

        if isinstance(self.data.value_type, str):
            raise Exception(">>>>>")
        else:
            for field in self.data.value_type.getFields():
                name = field.Name().capitalize()
                func = self.data.gofile.addFunction("GetBy{}".format(name))

                func.addArgs("{field} {type}".format(
                    field=field.Name(),
                    type=go_types.go_converter(field.getType())))
                func.addResults("res []*{value_type}".format(
                    value_type=self.data.getValueType()))

                body = '''    for _, value := range {data}_list <@
        if value.{name} == {field} <@
            res = append(res, value)
        @>
    @>
    return res'''.format(data=self.data.value_type.Name(),
                         name=name,
                         field=field.Name())
                func.addBody(body)
Ejemplo n.º 7
0
Archivo: set.py Proyecto: zheld/geyser
    def getNative( self ):
        if not self.data.table or not self.data.getIdentifier():
            return
        for field in self.args:
            name = field.Name( ).capitalize( )
            func = self.data.gotype.addMethod( "Set{}".format( name ) )

            func.addArgs( "{field} {type}".format( field = field.Name( ),
                                                            type = go_types.go_converter(field.getType())
                                                            ) )
            func.addResults( "error" )

            body = '''    sql := "UPDATE {data} SET {field} = $1 WHERE id = $2"
    _, err := core.Postgres.Exec(sql, {field}, self.Id)
    if err != nil <@
        return err
    @>
    self.{gofield} = {field}
    return nil'''.format( data = self.data.Name( ),
                          field = field.Name( ),
                          gofield = name
                          )

            func.addBody( body )
Ejemplo n.º 8
0
 def getValueType(self):
     return self.value_type.getFullType() if not isinstance(
         self.value_type, str) else go_types.go_converter(self.value_type)
Ejemplo n.º 9
0
 def getValueType( self ):
     return "{}.{}".format( self.value_type.Name( ), self.value_type.getType( ) ) if not isinstance( self.value_type, str ) else go_types.go_converter(self.value_type)
Ejemplo n.º 10
0
 def getGoType( self ):
     return go_types.go_converter(self.type) if not self.isData() else self.field.getFullType()
Ejemplo n.º 11
0
 def addVar(self, name, type, is_pointer=False):
     tf = "{name} {pointer}{type}".format(name=name,
                                          type=go_types.go_converter(type),
                                          pointer="*" if is_pointer else "")
     self.fields.append(tf)