1import platform
2from includes import *
3from common import waitForIndex
4
5
6def testWideSchema(env):
7    r = env
8    schema = []
9    FIELDS = 128 if platform.architecture()[0] == '64bit' else 64
10    for i in range(FIELDS):
11        schema.extend(('field_%d' % i, 'TEXT'))
12    env.assertOk(env.cmd('ft.create', 'idx', 'ON', 'HASH', 'schema', *schema))
13    N = 10
14    for n in range(N):
15        fields = []
16        for i in range(FIELDS):
17            fields.extend(('field_%d' % i, 'hello token_%d' % i))
18        env.assertOk(r.execute_command('ft.add', 'idx',
19                                       'doc%d' % n, 1.0, 'fields', *fields))
20    for _ in env.reloading_iterator():
21        waitForIndex(r, 'idx')
22        for i in range(FIELDS):
23
24            res = env.cmd('ft.search', 'idx', '@field_%d:token_%d' % (i, i), 'NOCONTENT')
25            env.assertEqual(res[0], N)
26
27            res = r.execute_command(
28                'ft.explain', 'idx', '@field_%d:token_%d' % (i, i), 'VERBATIM').strip()
29            env.assertEqual('@field_%d:token_%d' % (i, i), res)
30
31            res = env.cmd('ft.search', 'idx', 'hello @field_%d:token_%d' % (i, i), 'NOCONTENT')
32            env.assertEqual(res[0], N)
33
34        res = env.cmd('ft.search', 'idx', ' '.join(
35            ('@field_%d:token_%d' % (i, i) for i in range(FIELDS))))
36        env.assertEqual(res[0], N)
37
38        res = env.cmd('ft.search', 'idx', ' '.join(
39            ('token_%d' % (i) for i in range(FIELDS))))
40        env.assertEqual(res[0], N)
41
42    if not env.isCluster():
43        # todo: make it less specific to pass on cluster
44        res = env.cmd('ft.info', 'idx')
45        env.assertEqual(res[3][0], 'MAXTEXTFIELDS')