Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÌÔ±¦Êý¾Ý¿âOceanBase SQL±àÒëÆ÷²¿·Ö
 
×÷ÕߣºÔø¾­µÄѧÔü À´Ô´£ºCSDN ·¢²¼ÓÚ£º2015-01-12
  2647  次浏览      27
 

OceanBaseÊǰ¢Àï°Í°Í¼¯ÍÅ×ÔÖ÷Ñз¢µÄ¿ÉÀ©Õ¹µÄ¹ØÏµÐÍÊý¾Ý¿â£¬ÊµÏÖÁË¿çÐпç±íµÄÊÂÎñ£¬Ö§³ÖÊýǧÒÚÌõ¼Ç¼¡¢Êý°ÙTBÊý¾ÝÉϵÄSQL²Ù×÷¡£ÔÚ°¢Àï°Í°Í¼¯ÍÅÏ£¬OceanBaseÊý¾Ý¿âÖ§³ÖÁ˶à¸öÖØÒªÒµÎñµÄÊý¾Ý´æ´¢£¬°üÀ¨ÊղؼС¢Ö±Í¨³µ±¨±í¡¢ÌìèÆÀ¼ÛµÈ¡£½ØÖ¹µ½2013Äê4Ô·ݣ¬OceanBaseÏßÉÏÒµÎñµÄÊý¾ÝÁ¿ÒѾ­³¬¹ýһǧÒÚÌõ¡£

¿´ÆðÀ´Í¦À÷º¦µÄ,½ñÌìÎÒÃÇÀ´Ñо¿ÏÂËüµÄÔ´´úÂë¡£¹ØÓÚOceanBaseµÄ¼Ü¹¹ÃèÊöÓкܶàÎĵµ£¬ÕâÆª±Ê¼ÇÒ²²»´òËãÉæ¼°ÕâЩ¶«Î÷£¬Ö»ÌÖÂÛOceanBaseµÄSQL±àÒ벿·ÖµÄ´úÂë¡£

OceanBaseÊÇÒ»¸ö¿ªÔ´µÄÊý¾Ý¿â,ÍйÜÔÚgithubÉÏ,µã»÷ÏÂÔØ¡£±¾ÎÄÌÖÂÛµÄÔ´Âë·¾¶¶ÔӦΪ£ºoceanbase_0.3/src/sql¡£×îеİ汾Ϊ0.4£¬±¾ÎÄÌÖÂ۵ĴúÂë»ùÓÚ0.3°æ±¾µÄOceanBase.ĿǰOceanBaseµÄÄܽâÎöµÄSQL»¹±È½ÏÉÙ£¬°üÀ¨Select,Insert,Update,Delete,Show,ExplainµÈ.

Ñ¡ÔñOceanBase 0.3 °æ±¾½øÐÐѧϰ£¬»ùÓÚ¼¸¸öÔ­Òò£º

1.OceanBase µÄ¸ßÖÊÁ¿£¬¸ß¿É¶ÁÐÔ

2.OceanBase °æ±¾µÍ£¬Ã»ÓÐÀúÊ·¸ºµ£

3.OceanBase SQL½âÎöÏà¶Ô¼òµ¥£¬¸üÈÝÒ׿ú¼ûȫò£¬ÀûÓÚÀí½âÉè¼Æ¿ª·¢ÖÐÒª½â¾öµÄÖ÷ÒªÎÊÌâ¡£

4.ÓëÆäËûÊý¾Ý¿âµÄSQL½âÎö²¿·Ö½øÐжԱȣ¬ÉîÈëÀí½âÎÊÌâ±¾ÖÊ

¸Ã²¿·ÖÖ÷Òª¹¦ÄܰüÀ¨ÁË£¬SQLÓï¾ä½âÎö£¬Âß¼­¼Æ»®µÄÉú³É£¬ÎïÀí²Ù×÷·ûÔËËãµÈ¡£

Èë¿Ú£ºObSqlÀà

±¾²¿·ÖµÄÈë¿Úº¯ÊýÔÚob_sql.hÖÐ,µ÷Óú¯ÊýObSql::direct_execute¿ÉÒÔÖ±½ÓÖ´ÐÐSQLÓï¾ä,²¢·µ»Ø½á¹û¼¯ObResultSet¡£º¯Êýstmt_prepareÓÃÓÚ½âÎöÒªÔ¤±àÒëµÄSQLÓï¾ä,stmt_executeÔòÓÃÓÚÖ´ÐÐPrepare¹ýµÄSQLÓï¾ä¡£

class ObSql  
{
public:
ObSql(){}
~ObSql(){}
int direct_execute(const common::ObString &stmt, ObResultSet &result)
int stmt_prepare(const common::ObString &stmt, ObStmtPrepareResult &result);
int stmt_execute(const uint64_t stmt_id, const common::ObArray<common::ObObj> params, ObResultSet &result);
int stmt_close(const uint64_t stmt_id);
};

ÔÚ0.4°æ±¾ÖУ¬direct_execute,stmt_prepare,stmt_executeµÈº¯Êý¶¼±»ÉùÃ÷Ϊstaticº¯Êý,Òâζ×ŵ÷ÓÃSQLÓï¾äÖ´ÐÐʱ¿ÉÒÔÖ±½ÓObSql::direct_execute¿ÉÒÔÖ´ÐÐSQLÓï¾ä£¬¶ø²»±ØÔÙÏȶ¨ÒåÒ»¸öObSql¶ÔÏó¡£OceanBase»¹ÓÐÄêÇᣬ»¹´æÔÚ²»×㣬ÎÒÃÇÔĶÁÔ´ÂëʱӦ¸Ã´ø×ÅÅúÅÐ˼¿¼µÄ¾«Éñ¡£

Ö±½Ó½øÈëdirect_executeº¯Êý£¬¿ÉÒÔ¿´µ½Õû¸öÖ´ÐеĹý³Ì,º¯ÊýÖÐÓкܶàµÄif,elseÓï¾ä£¬Ö÷ÒªÊÇÒòΪOceanBaseÓÐÒ»¸ö±àÂë¹æ·¶ÒªÇó£ºÒ»¸öº¯ÊýÖ»ÄÜÓÐÒ»¸ö·µ»Ø³ö¿Ú.°´µ¥³ö¿ÚµÄ¹æ·¶Ð´´úÂë»áʹµÃд´úÂëµÄ˼··Ç³£ÇåÎú£¬²»ÈÝÒ׳öÏÖÄÚ´æÐ¹Â¶µÈÎÊÌ⣬ÔÚ´óÐÍÏîÄ¿Öл¹ÊÇÓ¦¸Ã¾¡Á¿±£³Öº¯Êýµ¥³ö¿Ú.µ±È»£¬ÎÒ¾õµÃ±£³ÖÒ»¸öº¯Êý¹¦Äܼò½à¡¢¼òµ¥Ò×¶®Ò²ÊǷdz£ÖØÒªµÄ¡£

ÔÚÄãÔĶÁÔ´ÂëµÄ¹ý³ÌÖУ¬Óöµ½µÄ´ó²¿·Öº¯Êý¶¼»áÊÇÕâ¸öÑù.ÅÙÈ¥ÆäËû¸ÉÈÅÐÅÏ¢£¬½áºÏ×¢ÊÍ£¬¿ÉÒÔ¿´µ½£¬SQLÖ´ÐзÖΪ5¸ö²½Ö裺

³õʼ»¯

parse_init(&parse_res)

½âÎöSQLÓï·¨Ê÷

parse_sql(&parse_res, stmt.ptr(), static_cast<size_t>(stmt.length()));

ÖÆ¶¨Âß¼­¼Æ»®

resolve(&logical_plan, parse_res.result_tree_)
ObMultiPlan* multi_plan = static_cast<ObMultiPlan*>(logical_plan.plan_tree_);

Éú³ÉÎïÀí¼Æ»®£º

trans.add_logical_plans(multi_plan);
physical_plan = trans.get_physical_plan(0)

Ö´ÐÐÎïÀí¼Æ»®£º

exec_plan->open()

³õʼ»¯½ö½öÊdzõʼ»¯Ò»¸ö»º³åÇø£¬¿ÉÒÔÂÔ¹ýÀ´Ñо¿ºóÃæ¹Ø¼üµÄ4²½¡£

½âÎöSQLÓï·¨Ê÷

ÏñPostgreSQL,MySQlµÈÒ»Ñù,OceanBase²ÉÓÃlexºÍyaccϵµÄ´Ê·¨ºÍÓï·¨½âÎö¹¤¾ßÉú³ÉÓï·¨Ê÷¡£GNUϵĴʷ¨ºÍÓï·¨¹¤¾ßΪFlexºÍBison.FlexÀûÓÃÕýÔò±í´ïʽʶ±ðSQLÓï¾äÖеÄËùÓдÊÓBisonÔò¸ù¾ÝÀàËÆBNFµÄÓï·¨¹æÔòʶ±ðSQLÓïÒ壬´Ó¶ø¹¹½¨Óï·¨Ê÷¡£²»ÊìϤFlexÓëBisonµÄÍ¬Ñ§ÍÆ¼öÔĶÁ¡¶FLEXÓëBISON¡·(Ã²ËÆÎÒҲûÕÒµ½ÆäËûÀàËÆµÄÊé¼®,^_^)£¬ÀïÃæÒ²ÓÐרÃŵÄÒ»Õ½²ÊöÀûÓÃFlexÓëBisonʵÏÖÒ»¸ö¼òµ¥µÄSQL·ÖÎöÆ÷¡£

OceanBaseµÄSQLÓï·¨Ê÷ÓëPostgreSQL¸üΪÏàËÆ£¬µ«ÊÇÉè¼ÆÉÏÒ²ÓкܶàÇø±ð¡£

½ÚµãÉè¼Æ

Óï·¨Ê÷ÓÉһϵÁеĽڵ㴮Á¬¶ø³É¡£ÎÒѡȡ½ÏΪ¼òµ¥µÄUpdateÓï¾ä×÷ΪʾÀý£¬ÏÂÃæÊÇÒ»¸öÀý¾ä£º

Update student set sex="M" where name="СÃ÷";

ÆäSQLÓï·¨Ê÷¿ÉÒÔ±íʾΪ£º

|--Update Stmt

|--Table:student

|--TargeList:

|--sex = "M"

|--Qualifications:

|--name="СÃ÷"

Óï·¨½âÎöµÄ×÷ÓþÍÊÇÈçºÎÓÃÊý¾Ý½á¹¹À´±íʾÉÏÃæÕâ¿ÃÓï·¨Ê÷¡£²»Í¬µÄÊý¾Ý¿âÓв»Í¬µÄ·½°¸¡£Îª¼ÓÇ¿¶Ô±È£¬ÎÒѡȡÁËPostgreSQL,RedBaseÓëOceanBase×÷Ϊ²ÎÕÕ¡£

PostgreSQLÓï·¨Ê÷µÄ½ÚµãÉè¼Æ

PostgreSQLÖÐÿһÖÖÓï·¨¶¼»áÓÐÒ»¸ö¶ÔÓ¦µÄ½á¹¹Ì壬±ÈÈç¸üÐÂÓï¾äUpdate¶ÔÓ¦µÄ½á¹¹ÌåΪUpdateStmt:

typedef struct UpdateStmt  

NodeTag type; /* ö¾ÙÀàÐÍ */
RangeVar *relation; /* Òª¸üÐµĹØÏµ */
List *targetList; /* Òª¸üеÄÏî */
Node *whereClause; /* ¸üÐÂÌõ¼þ */
List *fromClause; /* optional from clause for more tables */
List *returningList; /* ·µ»ØµÄ±í´ïʽÁбí */
WithClause *withClause; /* WITH clause */
UpdateStmt;

ÆäÖÐtypeÊǸöö¾ÙÖµ,±íʾ½á¹¹ÌåµÄÀàÐÍ,ÔÚUpdateStmtÖÐΪT_UpdateStmt¡£ÆäËû×ֶηֱð¶ÔÓ¦UPdateÓï¾äµÄ¸÷¸ö²¿·Ö£¬¸Ã½á¹¹Ìå¿ÉÒÔÖ§³Ö¸ü¸´ÔÓµÄUpdateÓï¾ä¡£

PostgreSQLÖл¹ÓÐÒ»¸ö»ù´¡µÄ½á¹¹Ì壺

typedef struct Node  
{
NodeTag type;
} Node;

ÓÃÓÚÓï·¨½âÎöµÄ½á¹¹Ìå¶¼¿ÉÒÔÇ¿ÖÆ×ª»»³ÉNode * ÀàÐÍ¡£PostgreSQLÖд«µÝÓï·¨½á¹¹ÌåÊǶ¼»áת»¯³ÉNode *ÀàÐÍ£¬Ö»ÓÐÔÚÐèÒªÃ÷È·ÀàÐ͵Äʱºò¸ù¾Ýtypeö¾Ùֵת»»³ÉÐèÒªµÄÀàÐÍ¡£Node *µÄ×÷ÓÃÓеÄÀàËÆÓÚvoid * ,µ«ÊǸüÀûÓÚµ÷ÊÔ¡£ÎÒÃÇÒ²¿ÉÒÔ¼òµ¥µÄÈÏΪ£ºÖîÈçUpdateStmtµÄÓï·¨½âÎö½á¹¹ÌåÃǶ¼¼Ì³Ð×ÔNode¡£

ÓÉÓÚÿ¸öÓï·¨¶ÔÓ¦Ò»¸ö½á¹¹Ì壬Òò´ËÔÚPostgreSQLÖдæÔںܶàÀàËÆµÄ½á¹¹Ì壬°üÀ¨SelectStmt,InsertStmt,DeleteStmtµÈ¡£×îÖÕÕâЩ½á¹¹Ì廹»á±»Í³Ò»×ª»»³ÉQuery½á¹¹Ìå¡£¼´QueryÊÇͳһµÄÓï·¨Ê÷½á¹¹Ìå¡£

ÔÚPostgreSQLÖУ¬Ê¾ÀýÖеÄSQLÓï·¨Ê÷¿É±íʾΪ£º

|--UpdateStmt

|--type: T_UpdateStmt

|--relation: student

|--targetList:

|--targest[0]:

|--name: sex

|--val: "M"

|--whereClause£º

|--expr: =

|--left: name

|--right: "СÃ÷"

RedBaseµÄÓï·¨Ê÷µÄ½ÚµãÉè¼Æ

RedBaseÊÇ˹̹¸£µÄÊý¾Ý¿âϵͳʵÏÖÕâÃſγÌ(cs346)µÄÒ»¸öÏîÄ¿¡£RedBase±ÈÆðPostgreSQL,OceanBaseÕâÑùµÄ¸´ÔÓÊý¾Ý¿â¶øÑÔ£¬Ê®·ÖµÄ¼òµ¥¡£µ«ÊÇÆäÓï·¨Ê÷µÄ½ÚµãÉè¼ÆÓëÆäËûÊý¾Ý¿â²»Í¬£¬Òò´ËÌá³öÀ´×ö¶Ô±È¡£

typedef struct node{  
NODEKIND kind;/*ö¾ÙÀàÐÍ*/

union{
/* SM component nodes */
/* create table node */
struct{
char *relname;
struct node *attrlist;
} CREATETABLE;

/*´Ë´¦Ê¡ÂÔn¶à¸ö½á¹¹Ìå...*/

/* QL component nodes */
/* query node */
...

/* update node */
struct{
char *relname; /* ¹ØÏµÃû */
struct node *relattr; /* ÊôÐÔ */
struct node *relorvalue; /* Ð޸ĺóÖµ */
struct node *conditionlist; /* Ìõ¼þÁбí */
} UPDATE;

/*´Ë´¦Ê¡ÂÔn¶à¸ö½á¹¹Ìå...*/
} u;
} NODE;

RedBaseÊý¾Ý¿âµÄÓï·¨Ê÷½á¹¹ÌåÖ»ÓÐÒ»¸ö£¬¾ÍÊÇNODE,µ«ÊÇÕâ¸öNODE½á¹¹ÌåµÄÉùÃ÷ÓÐ150¶àÐÐ(^-^).NODE°üÀ¨Ò»¸öö¾ÙÀàÐÍ,×÷ÓÃÓÚPostgreSQLÖеÄtypeÒ»Ñù¡£ËùÓеÄÓï·¨½á¹¹ÈçUPDATE,SELECT,CREATETABLEµÈ¹¹³É¾Þ´óµÄÁªºÏÌå¡£Õë¶ÔUpdateÓï¾äµÄ½á¹¹Ìå°üÀ¨Á˹ØÏµÃû,ÊôÐÔ,Ð޸ĺóµÄÖµ,Ìõ¼þÁбíµÈ×ֶΣ¬ÏÔÈ»ÕâÖÖÉè¼ÆÖ»ÄÜÖ§³Ö¼òµ¥µÄUpdateÓï¾ä¡£

RedBase²ÉÓá°¾ÞÐÍ¡±ÁªºÏÌåÈ¡´úPostgreSQLÖеĶà¸ö½á¹¹Ì壬ÃâÈ¥ÁËÀàÐÍת»»£¨Óï·¨½á¹¹Ìåµ½Node*µÄת»»£©¡£Èç¹û°ÑPostgreSQLÓï·¨Ê÷½Úµã¿´³ÉÊÇ¡°¼Ì³Ð¡±½á¹¹£¬ÄÇôRedBaseµÄÓï·¨Ê÷½Úµã¿ÉÒÔ¿´³ÉÊÇ¡°×éºÏ¡±½á¹¹¡£

ÔÚRedBaseÖУ¬Ê¾ÀýÖеÄSQLÓï·¨Ê÷¿É±íʾΪ£º

|--NODE:

|--kind: N_UPDATE

|--u:UPDATE

|--relname: student

|--relattr:

|--kind: N_RELATTR

|--u:RELATTR

|--relname: (null)

|--attrname: sex

|--relorvalue:

|--kind: N_RELATTR_OR_VALUE

|--u:RELATTR_OR_VALUE

|--relattr: (null)

|--value:

|--kind:N_VALUE

|--u:VALUE

|--sval = "M"

|--conditionlist:

|--kind:N_LIST

|--u: LIST

|--next: (null)

|--curr:

|--kind: N_CONDITION

|--u: CONDITION

|--lhsRelattr:

|--kind: N_RELATTR

|--u:RELATTR

|--relname: (null)

|--attrname: name

|--op:

|--kind: N_EQ

|--rhsRelattr:(null)

|--rhsValue:

|--kind:N_VALUE

|--u:VALUE

|--sval = "M"

OceanBaseµÄÓï·¨Ê÷µÄ½ÚµãÉè¼Æ

OceanBase µÄÓï·¨Ê÷½Úµã½á¹¹ÌåÒ²Ö»ÓÐÒ»¸ö,¸Ã½á¹¹Ìå°üÀ¨Ò»¸öö¾ÙÀàÐͱäÁ¿type_,ºÍPostgreSQLÓëRedBaseÒ»Ñù£¬´ú±í¸Ã½á¹¹Ìå¶ÔÓ¦µÄÀàÐÍ¡£»¹ÓÐÁ½×éÊôÐÔ£¬¶ÔÓ¦ÖÕÖ¹·û½Úµã,Ö»ÄÜʹÓÃvakue_ºÍstr_value_Á½¸ö×ֶΣ¬·Ö±ð¶ÔÓ¦64λÕûÐÎÖµºÍ×Ö·û´®Öµ£»·ÇÖÕÖ¹·û½ÚµãʹÓÃ×îºóÁ½¸ö×Ö¶Î,num_child_±íʾ×Ó½ÚµãµÄ¸öÊý,children_Ö¸Ïò×Ó½ÚµãÊý×éµÄÊ×µØÖ·¡£

typedef struct _ParseNode  
{
ObItemType type_;

/* ÖÕÖ¹·û½ÚµãµÄÕæÊµµÄÖµ */
int64_t value_;
const char* str_value_;

/* ·ÇÖÕÖ¹·û½ÚµãµÄº¢×Ó½Úµã*/
int32_t num_child_; /*º¢×Ó½ÚµãµÄ¸öÊý*/
struct _ParseNode** children_;

// BuildPlanFunc m_fnBuildPlan;
} ParseNode;

¶ÔÓ¦Ò»¸ö½Úµã¶øÑÔ£¬ÒªÃ´ÊÇÖÕÖ¹·û½ÚµãҪôÊÇ·ÇÖÕÖ¹·û½Úµã£¬ËüÖ»»áʹÓÃÁ½×éÊôÐÔÖеÄÒ»×é¡£int,long,float,double,stringµÈ¶¼ÊÇÖÕÖ¹·ûÀàÐÍ£¬¿ÉÒÔ¿´³öint,long¶¼ÊÇÓÃ64λÕûÐÎint64±íʾ¡£float,double,stringÔòÓÃchar *×Ö·û´®±íʾ¡£ÖÕÖ¹·ûµÄnum_child_Ϊ0,children_Ϊnull.

PostgreSQLµÄ×ӽڵ㶼ÊÇÓÐÃû×ÖµÄ×ӽڵ㣬¿ÉÒÔʹÓÃÃû×Ö½øÐзÃÎÊ£¬ÈçÔÚPostgreSQLÖУ¬UpdateÓï¾äµÄwhereÌõ¼þ¿ÉÒÔͨ¹ý updatestmt.whereClause À´·ÃÎÊ ¡£ µ«ÔÚOceanBaseÖв»ÐÐ £¬ ËùÓеÄ×ӽڵ㶼ÊÇÄäÃûµÄ £¬ Ö»ÄÜͨ¹ýϱêÀ´·ÃÎÊ¡£


´ò¸ö±È·½£¬ÔÚPostgreSQLºÍRedBaseÖУ¬º¢×ÓÊÇÓÐÃû×ֵģ¬¿ÉÒÔ½ÐСÃ÷¡¢Ð¡ºìµÈ£¬¸ù¾ÝÃû×ÖÄã´ó¸Å¿ÉÒÔÖªµÀÕâ¸öº¢×ÓÊÇÄÐÊÇÅ®£»µ«ÊÇÔÚOceanBase¼Ò£¬ËûÃÇ·Ö±ð½ÐÀÏ´ó£¬À϶þ£¬ÀÏÈý£¬ÌýÃû×ÖÍêÈ«Ìý²»³öÊÇÄÐÊÇÅ®µÄ¡£OceanBase¼ÒÓе㲻½²¾¿^-^¡£

¿ÉÒÔÔÚÔËÐÐʱ²é¿´Óï·¨Ê÷µÄ½á¹¹£¬Ò²¿ÉÒÔÔÚ´úÂëÖпÉÒÔÍÆ¸÷¸ö×Ó½Úµã´ú±íµÄÀàÐÍ£¬µ«ÊDz»ÈçPostgreSQLºÍRedBase·½±ã¡£ÔÚsql_parser.yÎļþÖУ¬¶¨ÒåÁËSQLµÄÓï·¨¹æÔò£¬Í¬Ê±Ò²¹æ¶¨Á˸÷ÖÖÀàÐ͵Ä×Ó½ÚµãµÄ½á¹¹¡£

update_stmt:   
UPDATE relation_factor SET update_asgn_list opt_where
{
ParseNode* assign_list = merge_tree(result->malloc_pool_, T_ASSIGN_LIST, $4);
$$ = new_non_terminal_node(result->malloc_pool_, T_UPDATE, 3, $2, assign_list, $5);
}
;

´ÓÉÏÊö´úÂë¿ÉÒÔ¿´³ö£¬UpdateÓï·¨½á¹¹ÌåÖÐÓÐ3¸ö×ӽڵ㣬µÚÒ»¸ö±íʾ±íÃû£¬µÚ¶þ¸ö±íʾҪ¸üÐÂÁбíÏµÚÈý¸ö±íʾ¸üеÄÌõ¼þÓï¾ä¡£

ʾÀýÖеÄUpdateÓï¾äÔÚOceanBaseÖпÉÒÔ±íʾΪÈçÏÂÐÎʽ£º

|--ParseNode

|--type: T_UPDATE

|--num_child: 3

|--children[0]:

|--type: T_IDENT

|--str_value: student

|--children[1]:

|--type: T_ASSIGN_LIST

|--num_child:1

|--children[0]:

|--type: T_ASSIGN_ITEM

|--children[0]:

|--type: T_IDENT

|--str_value: sex

|children[1]:

|--type: T_EXPR

|--children[0]:

|--type: T_STRING

|--str_value: "M"

|--children[2]:

|--type: T_OP_EQ

|--num_child: 2

|--children[0]:

|--type: T_IDENT

|--str_value: name

|--children[1]:

|--type: T_IDENT

|--str_value: "СÃ÷"

OceanBaseÖвÉÓõÄÕâÖÖ·½Ê½È±µãºÜÃ÷ÏÔ£¬¾ÍÊÇʹÓÃÕâЩ½á¹¹Ìåʱ±ØÐëÒª×Ðϸ±æ±ð¸÷¸ö×Ó½Úµã´ú±íµÄÒâÒ壬·ñÔòÈÝÒ׳ö´í¡£ÓŵãͬÑùÒ²ºÜÃ÷ÏÔ£¬¿ÉÒԷdz£Áé»îµÄ¹¹½¨³öÓï·¨Ê÷¡£

Óï·¨Ê÷µÄ½ÚµãµÄÉè¼Æ£¬Ö÷ÒªÊÇΪÁ˽â¾öÈçºÎ±í´ïÓï·¨½á¹¹¡£²»Í¬µÄÊý¾Ý¿âÓв»Í¬µÄ¾ßÌåʵÏÖ¡£OceanBase²ÉÓÃÖÕÖ¹·ûºÍ·ÇÖÕÖ¹·û·ÖÀ࣬ʹÓÃOceanBaseµÄÉè¼Æ¼«¾ßÁé»îÐÔ£¬µ«Ê¹ÓÃʱÐèÒª×ÐϸÑéÖ¤£¬±ÜÃâ³ö´í¡£

   
2647 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ


²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí


GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí