Example #1
0
 def _scan_bql_maybe_end(self, text):
   assert text == '}'
   if bql_string_complete_p(self._bql.getvalue()):
     operator = ast.Located([0, self.cur_pos - 1], vv.symbol('bayesdb_bql'))
     population = ast.Located(self._name_position, vv.symbol(self._name))
     bql = ast.Located(
       [self._bql_start, self.cur_pos - 1],
       vv.string(self._bql.getvalue()))
     self.produce(ast.Located([0, self.cur_pos - 1], [operator, population, bql]))
   else:
     self._bql.write(text)
Example #2
0
 def _bql(self, lines):
     out = StringIO.StringIO()
     ok = False
     for line in lines:
         if ok:
             self._bdb.execute(out.getvalue())
             out = StringIO.StringIO()
             ok = False
         out.write('%s\n' % (line, ))
         if out.getvalue() and bql_string_complete_p(out.getvalue()):
             ok = True
     cursor = self._bdb.execute(out.getvalue())
     return utils_bql.cursor_to_df(cursor)
Example #3
0
 def default(self, line):
     # XXX What is this idiocy?  End-of-input is reported the same
     # as the line with characters `E', `O', `F'.
     if line == 'EOF':
         self.stdout.write('\nMoriturus te querio.\n')
         return True
     if self.prompt == self.def_prompt:
         if line.startswith('.'):
             cmd = line
             for i, c in enumerate(line):
                 if c in (' ', '\t'):
                     cmd = line[:i]
                     break
             self.stdout.write('Unknown command: %s\n' % (cmd, ))
             return False
     # Add a line and check whether it finishes a BQL phrase.
     self.bql.write(line)
     self.bql.write('\n')
     string = self.bql.getvalue()
     if parse.bql_string_complete_p(string):
         # Reset the BQL input.
         self.bql = StringIO.StringIO()
         self.prompt = self.def_prompt
         try:
             first = True
             for phrase in parse.parse_bql_string(string):
                 cursor = bql.execute_phrase(self._bdb, phrase)
                 with txn.bayesdb_caching(self._bdb):
                     # Separate the output tables by a blank line.
                     if first:
                         first = False
                     else:
                         self.stdout.write('\n')
                     if cursor is not None:
                         pretty.pp_cursor(self.stdout, cursor)
         except (bayeslite.BayesDBException, bayeslite.BQLParseError) as e:
             self.stdout.write('%s\n' % (e, ))
         except Exception:
             self.stdout.write(traceback.format_exc())
     else:
         self.prompt = self.bql_prompt
     return False
Example #4
0
 def default(self, line):
     # XXX What is this idiocy?  End-of-input is reported the same
     # as the line with characters `E', `O', `F'.
     if line == 'EOF':
         self.stdout.write('\nMoriturus te querio.\n')
         return True
     if self.prompt == self.def_prompt:
         if line.startswith('.'):
             cmd = line
             for i, c in enumerate(line):
                 if c in (' ', '\t'):
                     cmd = line[:i]
                     break
             self.stdout.write('Unknown command: %s\n' % (cmd,))
             return False
     # Add a line and check whether it finishes a BQL phrase.
     self.bql.write(line)
     self.bql.write('\n')
     string = self.bql.getvalue()
     if parse.bql_string_complete_p(string):
         # Reset the BQL input.
         self.bql = StringIO.StringIO()
         self.prompt = self.def_prompt
         try:
             first = True
             for phrase in parse.parse_bql_string(string):
                 cursor = bql.execute_phrase(self._bdb, phrase)
                 with txn.bayesdb_caching(self._bdb):
                     # Separate the output tables by a blank line.
                     if first:
                         first = False
                     else:
                         self.stdout.write('\n')
                     if cursor is not None:
                         pretty.pp_cursor(self.stdout, cursor)
         except (bayeslite.BayesDBException, bayeslite.BQLParseError) as e:
             self.stdout.write('%s\n' % (e,))
         except Exception:
             self.stdout.write(traceback.format_exc())
     else:
         self.prompt = self.bql_prompt
     return False
Example #5
0
def test_complete():
    assert parse.bql_string_complete_p('')
    assert parse.bql_string_complete_p(';')
    assert parse.bql_string_complete_p(';;;')
    assert parse.bql_string_complete_p('\n;\n;;;\n;\n')
    assert not parse.bql_string_complete_p('select 0')
    assert parse.bql_string_complete_p('select 0;')
    assert not parse.bql_string_complete_p('select 0\nfrom t')
    assert parse.bql_string_complete_p('select 0\nfrom t;')
    assert not parse.bql_string_complete_p('select 0;select 1')
    assert parse.bql_string_complete_p('select 0;select 1;')
    assert not parse.bql_string_complete_p('select 0;\nselect 1')
    assert parse.bql_string_complete_p('select 0;\nselect 1;')
Example #6
0
def test_complete():
    assert parse.bql_string_complete_p('')
    assert parse.bql_string_complete_p(';')
    assert parse.bql_string_complete_p(';;;')
    assert parse.bql_string_complete_p('\n;\n;;;\n;\n')
    assert not parse.bql_string_complete_p('select 0')
    assert parse.bql_string_complete_p('select 0;')
    assert not parse.bql_string_complete_p('select 0\nfrom t')
    assert parse.bql_string_complete_p('select 0\nfrom t;')
    assert not parse.bql_string_complete_p('select 0;select 1')
    assert parse.bql_string_complete_p('select 0;select 1;')
    assert not parse.bql_string_complete_p('select 0;\nselect 1')
    assert parse.bql_string_complete_p('select 0;\nselect 1;')