def run(self, query=None, data=None): self.load_config() if data is not None or query is not None: self.format = self.format_stdin self.echo.verbose = False if self.echo.verbose: show_version() if not self.connect(): return if data is not None and query is None: # cat stuff.sql | clickhouse-cli return self.handle_input('\n'.join(data), verbose=False) if data is None and query is not None: # clickhouse-cli -q 'SELECT 1' return self.handle_query(query, stream=True) if data is not None and query is not None: # cat stuff.csv | clickhouse-cli -q 'INSERT INTO stuff' return self.handle_query(query, data=data, stream=True) layout = create_prompt_layout( lexer=PygmentsLexer(CHLexer), get_prompt_tokens=get_prompt_tokens, get_continuation_tokens=get_continuation_tokens, multiline=self.multiline, ) buffer = CLIBuffer( client=self.client, multiline=self.multiline, ) application = Application( layout=layout, buffer=buffer, style=CHStyle, key_bindings_registry=KeyBinder.registry, ) eventloop = create_eventloop() cli = CommandLineInterface(application=application, eventloop=eventloop) try: while True: try: cli_input = cli.run(reset_current_buffer=True) self.handle_input(cli_input.text) except KeyboardInterrupt: # Attempt to terminate queries for query_id in self.query_ids: self.client.kill_query(query_id) self.echo.error("\nQuery was terminated.") finally: self.query_ids = [] except EOFError: self.echo.success("Bye.")
def run(self, query, data): self.load_config() if data or query is not None: self.format = self.format_stdin self.echo.verbose = False if self.echo.verbose: show_version() if not self.connect(): return if self.client: self.client.settings = self.settings self.client.cli_settings = { 'multiline': self.multiline, 'format': self.format, 'format_stdin': self.format_stdin, 'show_formatted_query': self.show_formatted_query, 'highlight': self.highlight, 'highlight_output': self.highlight_output, } if data and query is None: # cat stuff.sql | clickhouse-cli # clickhouse-cli stuff.sql for subdata in data: self.handle_input(subdata.read(), verbose=False, refresh_metadata=False) return if not data and query is not None: # clickhouse-cli -q 'SELECT 1' return self.handle_query(query, stream=True) if data and query is not None: # cat stuff.csv | clickhouse-cli -q 'INSERT INTO stuff' # clickhouse-cli -q 'INSERT INTO stuff' stuff.csv for subdata in data: compress = 'gzip' if os.path.splitext( subdata.name)[1] == '.gz' else False self.handle_query(query, data=subdata, stream=True, compress=compress) return layout = create_prompt_layout( lexer=PygmentsLexer(CHLexer) if self.highlight else None, get_prompt_tokens=get_prompt_tokens, get_continuation_tokens=get_continuation_tokens, multiline=self.multiline, ) buffer = CLIBuffer( client=self.client, multiline=self.multiline, metadata=self.metadata, ) application = Application( layout=layout, buffer=buffer, style=CHStyle if self.highlight else None, key_bindings_registry=KeyBinder.registry, ) eventloop = create_eventloop() self.cli = CommandLineInterface(application=application, eventloop=eventloop) self.cli.application.buffer.completer.refresh_metadata() try: while True: try: cli_input = self.cli.run(reset_current_buffer=True) self.handle_input(cli_input.text) except KeyboardInterrupt: # Attempt to terminate queries for query_id in self.query_ids: self.client.kill_query(query_id) self.echo.error("\nQuery was terminated.") finally: self.query_ids = [] except EOFError: self.echo.success("Bye.")
def run(self, query, data): self.load_config() if data or query is not None: self.format = self.format_stdin self.echo.verbose = False if self.echo.verbose: show_version() if not self.connect(): return if self.client: self.client.settings = self.settings self.client.cli_settings = { 'multiline': self.multiline, 'vi_mode': self.vi_mode, 'format': self.format, 'format_stdin': self.format_stdin, 'show_formatted_query': self.show_formatted_query, 'highlight': self.highlight, 'highlight_output': self.highlight_output, 'refresh_metadata_on_start': self.refresh_metadata_on_start, 'refresh_metadata_on_query': self.refresh_metadata_on_query, } if data and query is None: # cat stuff.sql | clickhouse-cli # clickhouse-cli stuff.sql for subdata in data: self.handle_input(subdata.read(), verbose=False, refresh_metadata=False) return if not data and query is not None: # clickhouse-cli -q 'SELECT 1' return self.handle_query(query, stream=False) if data and query is not None: # cat stuff.csv | clickhouse-cli -q 'INSERT INTO stuff' # clickhouse-cli -q 'INSERT INTO stuff' stuff.csv for subdata in data: compress = 'gzip' if os.path.splitext( subdata.name)[1] == '.gz' else False self.handle_query(query, data=subdata, stream=True, compress=compress) return buffer = CLIBuffer( client=self.client, multiline=self.multiline, metadata=self.metadata, ) root_container = Window(content=BufferControl(buffer=buffer)) layout = Layout(root_container) # layout.focus(root_container) # layout = prompt( # lexer=PygmentsLexer(CHLexer) if self.highlight else None, # # get_prompt_tokens=get_prompt_tokens, # # get_continuation_tokens=get_continuation_tokens, # multiline=self.multiline, # ) hist = FileHistory( filename=os.path.expanduser('~/.clickhouse-cli_history')) self.completer = CHCompleter(self.client, self.metadata) self.session = PromptSession( style=CHStyle if self.highlight else None, lexer=PygmentsLexer(CHLexer) if self.highlight else None, message=get_prompt_tokens()[0][1], prompt_continuation=get_continuation_tokens()[0][1], multiline=is_multiline(self.multiline), vi_mode=self.vi_mode, history=hist, key_bindings=kb, complete_while_typing=self.complete_while_typing, completer=ThreadedCompleter( DynamicCompleter(lambda: self.completer)), ) self.app = Application(layout=layout, # buffer=buffer, ) #self.cli = CommandLineInterface(application=application, eventloop=eventloop) if self.refresh_metadata_on_start: self.app.current_buffer.completer.refresh_metadata() try: while True: try: cli_input = self.session.prompt() self.handle_input(cli_input) except KeyboardInterrupt: # Attempt to terminate queries for query_id in self.query_ids: self.client.kill_query(query_id) self.echo.error("\nQuery was terminated.") finally: self.query_ids = [] except EOFError: self.echo.success("Bye.")