async def _compile_sys_queries(schema, cluster): queries = {} cfg_query = config.generate_config_query(schema) schema, sql = compiler.compile_bootstrap_script( schema, schema, cfg_query, expected_cardinality_one=True, single_statement=True) queries['config'] = sql role_query = ''' SELECT sys::Role { name, is_superuser, password, } FILTER .name = <str>$name; ''' schema, sql = compiler.compile_bootstrap_script( schema, schema, role_query, expected_cardinality_one=True, single_statement=True) queries['role'] = sql await _store_static_json_cache( cluster, 'sysqueries', json.dumps(queries), )
async def _populate_data(std_schema, schema, conn): script = ''' INSERT stdgraphql::Query; ''' schema, sql = compiler.compile_bootstrap_script(std_schema, schema, script) await conn.execute(sql) return schema
async def _init_defaults(std_schema, schema, conn): script = ''' CREATE MODULE default; ''' schema, sql = compiler.compile_bootstrap_script(std_schema, schema, script) await conn.execute(sql) return schema
async def _populate_data(std_schema, schema, conn): script = ''' INSERT stdgraphql::Query; INSERT stdgraphql::Mutation; ''' schema, sql = compiler.compile_bootstrap_script(std_schema, schema, script) await _execute_ddl(conn, sql) return schema
async def _get_dbs_and_roles(pgconn) -> Tuple[List[str], List[str]]: std_schema = await compiler.load_std_schema(pgconn) schema, get_databases_sql = compiler.compile_bootstrap_script( std_schema, std_schema, 'SELECT sys::Database.name', expected_cardinality_one=False, single_statement=True, ) databases = list( sorted( json.loads(await pgconn.fetchval(get_databases_sql)), key=lambda dname: dname == edbdef.EDGEDB_TEMPLATE_DB, )) schema, get_roles_sql = compiler.compile_bootstrap_script( std_schema, std_schema, '''SELECT sys::Role { name, parents := .member_of.name, }''', expected_cardinality_one=False, single_statement=True, ) roles = json.loads(await pgconn.fetchval(get_roles_sql)) sorted_roles = list( topological.sort({ r['name']: { 'item': r['name'], 'deps': r['parents'], } for r in roles })) return databases, sorted_roles
async def _configure(schema, conn, cluster, *, insecure=False, testmode=False): scripts = [] if not testmode: memory_kb = psutil.virtual_memory().total // 1024 settings = { 'shared_buffers': f'"{int(memory_kb * 0.2)}kB"', 'effective_cache_size': f'"{int(memory_kb * 0.5)}kB"', 'query_work_mem': f'"{6 * (2 ** 10)}kB"', } for setting, value in settings.items(): scripts.append(f''' CONFIGURE SYSTEM SET {setting} := {value}; ''') else: settings = {} if insecure: scripts.append(''' CONFIGURE SYSTEM INSERT Auth { priority := 0, method := (INSERT Trust), }; ''') config_spec = config.get_settings() for script in scripts: _, sql = compiler.compile_bootstrap_script( schema, schema, script, single_statement=True) if debug.flags.bootstrap: debug.header('Bootstrap') debug.dump_code(sql, lexer='sql') config_op_data = await conn.fetchval(sql) if config_op_data is not None and isinstance(config_op_data, str): config_op = config.Operation.from_json(config_op_data) settings = config_op.apply(config_spec, immutables.Map()) config_json = config.to_json(config_spec, settings) block = dbops.PLTopBlock() dbops.UpdateMetadata( dbops.Database(name=edbdef.EDGEDB_TEMPLATE_DB), {'sysconfig': json.loads(config_json)}, ).generate(block) await _execute_block(conn, block)
async def _compile_sys_queries(schema, cluster): queries = {} cfg_query = config.generate_config_query(schema) schema, sql = compiler.compile_bootstrap_script( schema, schema, cfg_query, expected_cardinality_one=True, single_statement=True) queries['config'] = sql.encode('utf-8') role_query = ''' SELECT sys::Role { name, allow_login, is_superuser, password, } FILTER .name = <str>$name; ''' schema, sql = compiler.compile_bootstrap_script( schema, schema, role_query, expected_cardinality_one=True, single_statement=True) queries['role'] = sql.encode('utf-8') data_dir = cluster.get_data_dir() queries_fn = os.path.join(data_dir, 'queries.pickle') with open(queries_fn, 'wb') as f: pickle.dump(queries, f)
async def _configure(schema, conn, cluster, *, insecure=False, testmode=False): scripts = [] if not testmode: memory_kb = psutil.virtual_memory().total // 1024 settings = { 'shared_buffers': f'"{int(memory_kb * 0.2)}kB"', 'effective_cache_size': f'"{int(memory_kb * 0.5)}kB"', 'query_work_mem': f'"{6 * (2 ** 10)}kB"', } for setting, value in settings.items(): scripts.append(f''' CONFIGURE SYSTEM SET {setting} := {value}; ''') else: settings = {} if insecure: scripts.append(''' CONFIGURE SYSTEM INSERT Auth { priority := 0, method := (INSERT Trust), }; ''') config_spec = config.get_settings() for script in scripts: _, sql = compiler.compile_bootstrap_script(schema, schema, script, single_statement=True) if debug.flags.bootstrap: debug.header('Bootstrap') debug.dump_code(sql, lexer='sql') config_op_data = await conn.fetchval(sql) if config_op_data is not None and isinstance(config_op_data, str): config_op = config.Operation.from_json(config_op_data) settings = config_op.apply(config_spec, immutables.Map()) data_dir = cluster.get_data_dir() overrides_fn = os.path.join(data_dir, 'config_sys.json') with open(overrides_fn, 'wt') as f: f.write(config.to_json(config_spec, settings))