Пример #1
0
def p_vid(p):
    '''
        vid : STRING
            | INT
            | function
    '''
    p[0] = p[1]
    if not isinstance(p[0], Value):
        if type(p[0]) in [str, bytes]:
            p[0] = Value(sVal=p[0])
        elif type(p[0]) is int:
            p[0] = Value(iVal=p[0])
        else:
            raise ValueError(f"Invalid vid type: {type(p[0])}")
Пример #2
0
def p_set(p):
    '''
        set : '{' list_items '}'
    '''
    s = NSet()
    s.values = set(p[2])
    p[0] = Value(uVal=s)
Пример #3
0
    def test_node_api(self):
        test_set = set()
        test_set.add(Value())
        node = Node(self.get_vertex_value(b'Tom'))
        assert 'Tom' == node.get_id().as_string()

        assert node.has_tag('tag2')

        assert ['prop0', 'prop1', 'prop2', 'prop3',
                'prop4'] == node.prop_names('tag2')

        assert [0, 1, 2, 3,
                4] == [(value.as_int()) for value in node.prop_values('tag2')]

        assert ['tag0', 'tag1', 'tag2'] == node.tags()

        expect_properties = {}
        for key in node.properties('tag2').keys():
            expect_properties[key] = node.properties('tag2')[key].as_int()
        assert {
            'prop0': 0,
            'prop1': 1,
            'prop2': 2,
            'prop3': 3,
            'prop4': 4,
        } == expect_properties
Пример #4
0
def p_path(p):
    '''
        path : '<' vertex steps '>'
             | '<' vertex '>'
    '''
    path = Path()
    path.src = p[2].get_vVal()
    if len(p) == 5:
        path.steps = p[3]
    p[0] = Value(pVal=path)
Пример #5
0
def hash_columns(ds, hashed_columns):
    if len(hashed_columns) == 0:
        return ds
    assert all(col < len(ds.column_names) for col in hashed_columns)
    for row in ds.rows:
        for col in hashed_columns:
            val = row.values[col]
            if val.getType() not in [Value.NVAL, Value.__EMPTY__]:
                row.values[col] = Value(iVal=murmurhash2(val))
    return ds
Пример #6
0
def p_map(p):
    '''
        map : '{' map_items '}'
            | '{' '}'
    '''
    m = NMap()
    if len(p) == 4:
        m.kvs = p[2]
    else:
        m.kvs = {}
    p[0] = Value(mVal=m)
Пример #7
0
def p_list(p):
    '''
        list : '[' list_items ']'
             | '[' ']'
    '''
    l = NList()
    if len(p) == 4:
        l.values = p[2]
    else:
        l.values = []
    p[0] = Value(lVal=l)
Пример #8
0
def p_vertex(p):
    '''
        vertex : '(' tag_list ')'
               | '(' vid tag_list ')'
    '''
    vid = None
    tags = None
    if len(p) == 4:
        tags = p[2]
    else:
        vid = p[2]
        tags = p[3]
    v = Vertex(vid=vid, tags=tags)
    p[0] = Value(vVal=v)
Пример #9
0
def t_BOOLEAN(t):
    r'(?i)true|false'
    v = Value()
    if t.value.lower() == 'true':
        v.set_bVal(True)
    else:
        v.set_bVal(False)
    t.value = v
    return t
Пример #10
0
def p_expr(p):
    '''
        expr : EMPTY
             | NULL
             | NaN
             | BAD_DATA
             | BAD_TYPE
             | OVERFLOW
             | UNKNOWN_PROP
             | DIV_BY_ZERO
             | OUT_OF_RANGE
             | INT
             | FLOAT
             | BOOLEAN
             | STRING
             | PATTERN
             | list
             | set
             | map
             | vertex
             | edge
             | path
             | function
    '''
    if isinstance(p[1], Value) or isinstance(p[1], Pattern):
        p[0] = p[1]
    elif type(p[1]) in [str, bytes]:
        p[0] = Value(sVal=p[1])
    elif type(p[1]) is int:
        p[0] = Value(iVal=p[1])
    elif type(p[1]) is bool:
        p[0] = Value(bVal=p[1])
    elif type(p[1]) is float:
        p[0] = Value(fVal=p[1])
    else:
        raise ValueError(f"Invalid value type: {type(p[1])}")
Пример #11
0
def t_NaN(t):
    r'NaN'
    t.value = Value(nVal=NullType.NaN)
    return t
Пример #12
0
def t_NULL(t):
    r'NULL'
    t.value = Value(nVal=NullType.__NULL__)
    return t
Пример #13
0
def t_EMPTY(t):
    r'EMPTY'
    t.value = Value()
    return t
Пример #14
0
def t_DIV_BY_ZERO(t):
    r'DIV_BY_ZERO'
    t.value = Value(nVal=NullType.DIV_BY_ZERO)
    return t
Пример #15
0
def p_edge_spec(p):
    '''
        edge : '[' edge_rank edge_props ']'
             | '[' ':' LABEL edge_props ']'
             | '[' ':' LABEL edge_rank edge_props ']'
             | '[' vid '-' '>' vid edge_props ']'
             | '[' vid '-' '>' vid edge_rank edge_props ']'
             | '[' ':' LABEL vid '-' '>' vid edge_props ']'
             | '[' ':' LABEL vid '-' '>' vid edge_rank edge_props ']'
             | '[' vid '<' '-' vid edge_props ']'
             | '[' vid '<' '-' vid edge_rank edge_props ']'
             | '[' ':' LABEL vid '<' '-' vid edge_props ']'
             | '[' ':' LABEL vid '<' '-' vid edge_rank edge_props ']'
    '''
    e = Edge()
    name = None
    rank = None
    src = None
    dst = None
    props = None
    etype = None

    if len(p) == 5:
        rank = p[2]
        props = p[3]
    elif len(p) == 6:
        name = p[3]
        props = p[4]
    elif len(p) == 7:
        name = p[3]
        rank = p[4]
        props = p[5]
    elif len(p) == 8:
        src = p[2]
        dst = p[5]
        if p[3] == '<' and p[4] == '-':
            etype = -1
        props = p[6]
    elif len(p) == 9:
        src = p[2]
        dst = p[5]
        if p[3] == '<' and p[4] == '-':
            etype = -1
        rank = p[6]
        props = p[7]
    elif len(p) == 10:
        name = p[3]
        src = p[4]
        dst = p[7]
        if p[5] == '<' and p[6] == '-':
            etype = -1
        props = p[8]
    elif len(p) == 11:
        name = p[3]
        src = p[4]
        dst = p[7]
        if p[5] == '<' and p[6] == '-':
            etype = -1
        rank = p[8]
        props = p[9]

    e.name = name
    e.ranking = rank
    e.src = src
    e.dst = dst
    e.props = props
    # default value of e.type is 1 if etype is None
    e.type = etype

    p[0] = Value(eVal=e)
Пример #16
0
def t_FLOAT(t):
    r'-?\d+\.\d+'
    t.value = Value(fVal=float(t.value))
    return t
Пример #17
0
def t_OVERFLOW(t):
    r'OVERFLOW'
    t.value = Value(nVal=NullType.ERR_OVERFLOW)
    return t
Пример #18
0
register_function('hash', murmurhash2)

parser = yacc.yacc(write_tables=False)


def parse(s):
    return parser.parse(s, lexer=lexer)


def parse_row(row):
    return [str(parse(x)) for x in row]


if __name__ == '__main__':
    expected = {}
    expected['EMPTY'] = Value()
    expected['NULL'] = Value(nVal=NullType.__NULL__)
    expected['NaN'] = Value(nVal=NullType.NaN)
    expected['BAD_DATA'] = Value(nVal=NullType.BAD_DATA)
    expected['BAD_TYPE'] = Value(nVal=NullType.BAD_TYPE)
    expected['OVERFLOW'] = Value(nVal=NullType.ERR_OVERFLOW)
    expected['UNKNOWN_PROP'] = Value(nVal=NullType.UNKNOWN_PROP)
    expected['DIV_BY_ZERO'] = Value(nVal=NullType.DIV_BY_ZERO)
    expected['OUT_OF_RANGE'] = Value(nVal=NullType.OUT_OF_RANGE)
    expected['123'] = Value(iVal=123)
    expected['-123'] = Value(iVal=-123)
    expected['3.14'] = Value(fVal=3.14)
    expected['-3.14'] = Value(fVal=-3.14)
    expected['true'] = Value(bVal=True)
    expected['True'] = Value(bVal=True)
    expected['false'] = Value(bVal=False)
Пример #19
0
    def test_all_interface(self):
        result = self.get_result_set()
        assert result.space_name() == "test"
        assert result.comment() == "Permission"
        assert result.error_msg() == "Permission"
        assert result.error_code() == ErrorCode.E_BAD_PERMISSION
        assert result.plan_desc() is None
        assert result.latency() == 100
        assert not result.is_empty()
        assert not result.is_succeeded()
        expect_keys = [
            "col1_empty",
            "col2_null",
            "col3_bool",
            "col4_int",
            "col5_double",
            "col6_string",
            "col7_list",
            "col8_set",
            "col9_map",
            "col10_time",
            "col11_date",
            "col12_datetime",
            "col13_vertex",
            "col14_edge",
            "col15_path",
            "col16_geography",
            "col17_duration",
        ]
        assert result.keys() == expect_keys
        assert result.col_size() == 17
        assert result.row_size() == 2

        # test column_values
        assert len(result.column_values("col6_string")) == 2
        assert result.column_values("col6_string")[0].is_string()
        assert result.column_values(
            "col6_string")[0].as_string() == "hello world"
        # test row_values
        assert len(result.row_values(0)) == 17
        assert result.row_values(0)[5].is_string()
        assert result.row_values(0)[5].as_string() == "hello world"

        # test rows
        assert len(result.rows()) == 2
        assert len(result.rows()[0].values) == 17
        assert isinstance(result.rows()[0].values[0], Value)
        assert isinstance(result.get_row_types(), list)

        # test get_row_types
        assert result.get_row_types() == [
            ttypes.Value.__EMPTY__,
            ttypes.Value.NVAL,
            ttypes.Value.BVAL,
            ttypes.Value.IVAL,
            ttypes.Value.FVAL,
            ttypes.Value.SVAL,
            ttypes.Value.LVAL,
            ttypes.Value.UVAL,
            ttypes.Value.MVAL,
            ttypes.Value.TVAL,
            ttypes.Value.DVAL,
            ttypes.Value.DTVAL,
            ttypes.Value.VVAL,
            ttypes.Value.EVAL,
            ttypes.Value.PVAL,
            ttypes.Value.GGVAL,
            ttypes.Value.DUVAL,
        ]

        # test record
        in_use = False
        for record in result:
            in_use = True
            record.size() == 17

            # test keys()
            assert record.keys() == expect_keys
            # test values()
            values = record.values()
            assert len(record.values()) == 17
            assert record.values()[0].is_empty()
            assert record.values()[5].is_string()
            assert record.values()[5].is_string()
            assert record.values()[5].as_string() == "hello world"

            # test get_value()
            assert record.get_value(0).is_empty()
            assert values[0].is_empty()
            assert record.get_value(1).is_null()
            assert record.get_value(1).as_null() == Null(Null.BAD_DATA)
            null_value = Value(nVal=Null.BAD_DATA)
            assert record.get_value(1) == ValueWrapper(null_value)
            assert str(record.get_value(1).as_null()) == 'BAD_DATA'

            # test get_value_by_key()
            assert record.get_value_by_key('col2_null').is_null()
            assert record.get_value_by_key('col3_bool').is_bool()
            assert not record.get_value_by_key('col3_bool').as_bool()

            # get_value_by_key with not exited key
            try:
                record.get_value_by_key('not existed')
                assert False, 'Not expect here'
            except InvalidKeyException as e:
                assert True
                assert e.message == "KeyError: `not existed'"
            assert values[1].is_null()
            assert record.get_value(2).is_bool()
            assert not record.get_value(2).as_bool()
            assert record.get_value(2).is_bool()
            assert record.get_value(3).is_int()
            assert record.get_value(3).as_int() == 100
            assert record.get_value(4).is_double()
            assert record.get_value(4).as_double() == 10.01
            assert record.get_value(5).is_string()
            assert record.get_value(5).as_string() == "hello world"
            assert record.get_value(6).is_list()
            assert record.get_value(7).is_set()
            assert record.get_value(8).is_map()
            assert record.get_value(9).is_time()
            assert record.get_value(10).is_date()
            assert record.get_value(11).is_datetime()
            assert record.get_value(12).is_vertex()
            assert record.get_value(13).is_edge()
            assert record.get_value(14).is_path()
            assert record.get_value(15).is_geography()
            assert record.get_value(16).is_duration()
        assert in_use

        # test use iterator again
        in_use = False
        for record in result:
            in_use = True
            record.size() == 17
        assert in_use
Пример #20
0
def t_dstr_STRING(t):
    r'"'
    t.value = Value(sVal=t.lexer.string)
    t.lexer.begin('INITIAL')
    return t
Пример #21
0
def t_INT(t):
    r'-?\d+'
    t.value = Value(iVal=int(t.value))
    return t
Пример #22
0
def t_BAD_DATA(t):
    r'BAD_DATA'
    t.value = Value(nVal=NullType.BAD_DATA)
    return t
Пример #23
0
def t_BAD_TYPE(t):
    r'BAD_TYPE'
    t.value = Value(nVal=NullType.BAD_TYPE)
    return t
Пример #24
0
def value(any):
    v = Value()
    if (isinstance(any, bool)):
        v.set_bVal(any)
    elif (isinstance(any, int)):
        v.set_iVal(any)
    elif (isinstance(any, str)):
        v.set_sVal(any)
    elif (isinstance(any, float)):
        v.set_fVal(any)
    elif (isinstance(any, list)):
        v.set_lVal(list2Nlist(any))
    elif (isinstance(any, dict)):
        v.set_mVal(map2NMap(any))
    else:
        raise TypeError("Do not support convert " + str(type(any)) +
                        " to nebula.Value")
    return v
Пример #25
0
def t_UNKNOWN_PROP(t):
    r'UNKNOWN_PROP'
    t.value = Value(nVal=NullType.UNKNOWN_PROP)
    return t
Пример #26
0
def t_OUT_OF_RANGE(t):
    r'OUT_OF_RANGE'
    t.value = Value(nVal=NullType.OUT_OF_RANGE)
    return t