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')